ADC_MEASUREMENT_ADV
|
ADC_MEASUREMENT_ADV.h
00001 00078 /*CODE_BLOCK_BEGIN*/ 00079 #ifndef ADC_MEASUREMENT_ADV_H 00080 #define ADC_MEASUREMENT_ADV_H 00081 00082 00083 /*********************************************************************************************************************** 00084 * HEADER FILES 00085 **********************************************************************************************************************/ 00086 00087 #include "GLOBAL_ADC/global_adc.h" 00088 #include "adc_measurement_adv_conf.h" 00089 00090 /********************************************************************************************************************** 00091 * MACROS 00092 **********************************************************************************************************************/ 00093 #if (!((XMC_LIB_MAJOR_VERSION == 2U) && \ 00094 (XMC_LIB_MINOR_VERSION >= 1U) && \ 00095 (XMC_LIB_PATCH_VERSION >= 8U))) 00096 #error "ADC_MEASUREMENT_ADV requires XMC Peripheral Library v2.1.8 or higher" 00097 #endif 00098 /********************************************************************************************************************** 00099 * ENUMS 00100 **********************************************************************************************************************/ 00107 typedef enum ADC_MEASUREMENT_ADV_STATUS 00108 { 00109 ADC_MEASUREMENT_ADV_STATUS_SUCCESS = 0, 00110 ADC_MEASUREMENT_ADV_STATUS_FAILURE, 00111 ADC_MEASUREMENT_ADV_STATUS_UNINITIALIZED 00112 } ADC_MEASUREMENT_ADV_STATUS_t; 00113 00114 00118 typedef enum ADC_MEASUREMENT_ADV_REQUEST_SOURCE 00119 { 00120 ADC_MEASUREMENT_ADV_REQUEST_SOURCE_SCAN = 0, 00121 ADC_MEASUREMENT_ADV_REQUEST_SOURCE_LOCAL_SCAN, 00122 ADC_MEASUREMENT_ADV_REQUEST_SOURCE_QUEUE, 00123 ADC_MEASUREMENT_ADV_REQUEST_SOURCE_LOCAL_QUEUE, 00124 } ADC_MEASUREMENT_ADV_REQUEST_SOURCE_t; 00125 00129 typedef enum ADC_MEASUREMENT_ADV_GAIN 00130 { 00131 ADC_MEASUREMENT_ADV_GAIN_1 = 0U, 00132 ADC_MEASUREMENT_ADV_GAIN_3 = 1U, 00133 ADC_MEASUREMENT_ADV_GAIN_6 = 2U, 00134 ADC_MEASUREMENT_ADV_GAIN_12 = 3U 00135 } ADC_MEASUREMENT_ADV_GAIN_t; 00136 00140 typedef enum ADC_MEASUREMENT_ADV_SUBTRATION 00141 { 00142 ADC_MEASUREMENT_ADV_SUBTRATION_12BIT_LEFT_ALIGN = 0U, 00143 ADC_MEASUREMENT_ADV_SUBTRATION_12BIT_RIGHT_ALIGN = 0U, 00144 ADC_MEASUREMENT_ADV_SUBTRATION_10BIT_LEFT_ALIGN = 2U, 00145 ADC_MEASUREMENT_ADV_SUBTRATION_10BIT_RIGHT_ALIGN = 0U, 00146 ADC_MEASUREMENT_ADV_SUBTRATION_8BIT_LEFT_ALIGN = 4U, 00147 ADC_MEASUREMENT_ADV_SUBTRATION_8BIT_RIGHT_ALIGN = 0U 00148 } ADC_MEASUREMENT_ADV_SUBTRATION_t; 00149 00153 typedef enum ADC_MEASUREMENT_ADV_FAST_COMPARE 00154 { 00155 ADC_MEASUREMENT_ADV_FAST_COMPARE_LOW = 0U, 00156 ADC_MEASUREMENT_ADV_FAST_COMPARE_HIGH = 1U, 00157 ADC_MEASUREMENT_ADV_FAST_COMPARE_INVALID = 2U 00158 } ADC_MEASUREMENT_ADV_FAST_COMPARE_t; 00159 00163 typedef enum ADC_MEASUREMENT_ADV_SYNC_SEQ 00164 { 00165 ADC_MEASUREMENT_ADV_SYNC_SEQ_POWER_DOWN = 0U, 00166 ADC_MEASUREMENT_ADV_SYNC_SEQ_STSEL_CONFIG, 00167 ADC_MEASUREMENT_ADV_SYNC_SEQ_EVAL_CONFIG, 00168 } ADC_MEASUREMENT_ADV_SYNC_SEQ_t; 00169 00170 00175 /********************************************************************************************************************** 00176 * DATA STRUCTURES 00177 **********************************************************************************************************************/ 00182 /*Anonymous structure/union guard start*/ 00183 #if defined(__CC_ARM) 00184 #pragma push 00185 #pragma anon_unions 00186 #elif defined(__TASKING__) 00187 #pragma warning 586 00188 #endif 00189 00190 typedef void (*ADC_MEASUREMENT_ADV_EVENT_CONFIG_t)(void); 00195 typedef struct ADC_MEASUREMENT_ADV_NVIC_CONFIG 00196 { 00197 uint32_t node_id; 00199 uint32_t priority; 00200 #if(UC_FAMILY == XMC4) 00201 uint32_t sub_priority; 00202 #endif 00203 bool interrupt_enable; 00204 #ifdef ADC_MEASUREMENT_ADV_NON_DEFAULT_IRQ_SOURCE_SELECTED 00205 uint8_t irqctrl; 00206 #endif 00207 } ADC_MEASUREMENT_ADV_NVIC_CONFIG_t; 00208 00209 #ifdef ADC_MEASUREMENT_ADV_LOCAL_SCAN_USED 00210 00213 typedef struct ADC_MEASUREMENT_ADV_SCAN 00214 { 00215 const ADC_MEASUREMENT_ADV_NVIC_CONFIG_t rs_intr_handle; 00217 const XMC_VADC_GROUP_CLASS_t iclass_config_handle; 00219 const XMC_VADC_SCAN_CONFIG_t *const scan_config_handle; 00221 const XMC_VADC_GATEMODE_t gating_mode; 00223 const XMC_VADC_SR_t srv_req_node; 00225 const uint32_t insert_mask; 00227 const uint8_t iclass_num; 00229 } ADC_MEASUREMENT_ADV_SCAN_t; 00230 #endif 00231 00232 #ifdef ADC_MEASUREMENT_ADV_LOCAL_QUEUE_USED 00233 00236 typedef struct ADC_MEASUREMENT_ADV_QUEUE 00237 { 00238 const ADC_MEASUREMENT_ADV_NVIC_CONFIG_t rs_intr_handle; 00240 const XMC_VADC_GROUP_CLASS_t iclass_config_handle; 00242 const XMC_VADC_QUEUE_CONFIG_t *const queue_config_handle; 00244 const XMC_VADC_GATEMODE_t gating_mode; 00246 const XMC_VADC_SR_t srv_req_node; 00248 const uint8_t iclass_num; 00250 } ADC_MEASUREMENT_ADV_QUEUE_t; 00251 #endif 00252 00253 00257 typedef struct ADC_MEASUREMENT_ADV_CHANNEL 00258 { 00259 XMC_VADC_CHANNEL_CONFIG_t *ch_handle; 00261 XMC_VADC_RESULT_CONFIG_t *res_handle[ADC_MEASUREMENT_ADV_RESULT_REG]; 00264 #ifdef ADC_MEASUREMENT_ADV_ANALOG_IO_USED 00265 ANALOG_IO_t *analog_io_config; 00266 #endif 00267 00268 #ifdef ADC_MEASUREMENT_ADV_FIFO_USED 00269 uint8_t max_fifo_required; 00271 uint8_t result_fifo_tail_number; 00272 #endif 00273 uint8_t group_index; 00275 uint8_t ch_num; 00277 #if(UC_FAMILY == XMC1) 00278 ADC_MEASUREMENT_ADV_GAIN_t shs_gain_factor; 00279 #endif 00280 00281 } ADC_MEASUREMENT_ADV_CHANNEL_t; 00282 00286 typedef struct ADC_MEASUREMENT_ADV 00287 { 00288 const ADC_MEASUREMENT_ADV_CHANNEL_t **const channel_array; 00290 #if defined(ADC_MEASUREMENT_ADV_ADC_SCAN_USED) || defined(ADC_MEASUREMENT_ADV_ADC_QUEUE_USED) || \ 00291 defined(ADC_MEASUREMENT_ADV_LOCAL_QUEUE_USED) 00292 union 00293 { 00294 #ifdef ADC_MEASUREMENT_ADV_ADC_SCAN_USED 00295 const ADC_SCAN_ENTRY_t **const scan_entries; 00296 #endif 00297 #ifdef ADC_MEASUREMENT_ADV_ADC_QUEUE_USED 00298 const ADC_QUEUE_ENTRY_t **const queue_entries; 00299 #endif 00300 #ifdef ADC_MEASUREMENT_ADV_LOCAL_QUEUE_USED 00301 const XMC_VADC_QUEUE_ENTRY_t **const local_queue_entries; 00302 #endif 00303 }; 00304 #endif 00305 00306 ADC_MEASUREMENT_ADV_EVENT_CONFIG_t event_config; 00309 union 00310 { 00311 #ifdef ADC_MEASUREMENT_ADV_ADC_SCAN_USED 00312 ADC_SCAN_t *const scan_handle; 00313 #endif 00314 #ifdef ADC_MEASUREMENT_ADV_ADC_QUEUE_USED 00315 ADC_QUEUE_t *const queue_handle; 00316 #endif 00317 #ifdef ADC_MEASUREMENT_ADV_LOCAL_SCAN_USED 00318 ADC_MEASUREMENT_ADV_SCAN_t *const local_scan_handle; 00319 #endif 00320 #ifdef ADC_MEASUREMENT_ADV_LOCAL_QUEUE_USED 00321 ADC_MEASUREMENT_ADV_QUEUE_t *const local_queue_handle; 00322 #endif 00323 }; 00324 00325 ADC_MEASUREMENT_ADV_STATUS_t *init_state; 00327 ADC_MEASUREMENT_ADV_REQUEST_SOURCE_t req_src; 00330 #ifdef ADC_MEASUREMENT_ADV_SYNC_USED 00331 union 00332 { 00333 struct 00334 { 00335 uint8_t sync_slave_g0 :1; 00336 uint8_t sync_slave_g1 :1; 00337 uint8_t sync_slave_g2 :1; 00338 uint8_t sync_slave_g3 :1; 00339 uint8_t :4; 00340 }; 00341 uint8_t sync_slaves; 00342 }; 00343 00344 #endif 00345 const uint8_t group_index; 00347 const uint8_t total_number_of_entries; 00350 const uint8_t total_number_of_channels; 00353 const bool start_at_initialization; 00355 #ifdef ADC_MEASUREMENT_ADV_SYNC_USED 00356 const bool configure_globiclass1; 00358 #endif 00359 } ADC_MEASUREMENT_ADV_t; 00360 00365 /*Anonymous structure/union guard end*/ 00366 #if defined(__CC_ARM) 00367 #pragma pop 00368 #elif defined(__TASKING__) 00369 #pragma warning restore 00370 #endif 00371 00372 #ifdef __cplusplus 00373 extern "C" { 00374 #endif 00375 00376 /*********************************************************************************************************************** 00377 * API Prototypes 00378 **********************************************************************************************************************/ 00418 DAVE_APP_VERSION_t ADC_MEASUREMENT_ADV_GetAppVersion(void); 00419 00478 void ADC_MEASUREMENT_ADV_StartADC(const ADC_MEASUREMENT_ADV_t *const handle_ptr); 00479 00537 void ADC_MEASUREMENT_ADV_SoftwareTrigger(const ADC_MEASUREMENT_ADV_t *const handle_ptr); 00538 00568 ADC_MEASUREMENT_ADV_STATUS_t ADC_MEASUREMENT_ADV_Init(const ADC_MEASUREMENT_ADV_t *const handle_ptr); 00569 00638 __STATIC_INLINE uint16_t ADC_MEASUREMENT_ADV_GetResult(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr) 00639 { 00640 uint16_t result; 00641 extern XMC_VADC_GROUP_t *const group_ptrs[XMC_VADC_MAXIMUM_NUM_GROUPS]; 00642 XMC_ASSERT("ADC_MEASUREMENT_ADV_GetResult:Invalid handle_ptr", (handle_ptr != NULL)) 00643 00644 result = XMC_VADC_GROUP_GetResult(group_ptrs[handle_ptr->group_index], 00645 (uint32_t) handle_ptr->ch_handle->result_reg_number); 00646 return(result); 00647 } 00648 00731 __STATIC_INLINE XMC_VADC_DETAILED_RESULT_t ADC_MEASUREMENT_ADV_GetDetailedResult(const 00732 ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr) 00733 { 00734 XMC_VADC_DETAILED_RESULT_t result_register; 00735 extern XMC_VADC_GROUP_t *const group_ptrs[XMC_VADC_MAXIMUM_NUM_GROUPS]; 00736 XMC_ASSERT("ADC_MEASUREMENT_ADV_GetDetailedResult:Invalid handle_ptr", (handle_ptr != NULL)) 00737 00738 result_register.res = XMC_VADC_GROUP_GetDetailedResult(group_ptrs[handle_ptr->group_index], 00739 (uint32_t) handle_ptr->ch_handle->result_reg_number); 00740 return(result_register); 00741 } 00742 #ifdef ADC_MEASUREMENT_ADV_FIFO_USED 00743 00821 __STATIC_INLINE uint16_t ADC_MEASUREMENT_ADV_GetFifoResult(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr) 00822 { 00823 uint16_t result; 00824 extern XMC_VADC_GROUP_t *const group_ptrs[XMC_VADC_MAXIMUM_NUM_GROUPS]; 00825 XMC_ASSERT("ADC_MEASUREMENT_ADV_GetFifoResult:Invalid handle_ptr", (handle_ptr != NULL)) 00826 00827 result = XMC_VADC_GROUP_GetResult(group_ptrs[handle_ptr->group_index], handle_ptr->result_fifo_tail_number); 00828 return(result); 00829 } 00908 __STATIC_INLINE XMC_VADC_DETAILED_RESULT_t ADC_MEASUREMENT_ADV_GetFifoDetailedResult(const 00909 ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr) 00910 { 00911 XMC_VADC_DETAILED_RESULT_t result_register; 00912 extern XMC_VADC_GROUP_t *const group_ptrs[XMC_VADC_MAXIMUM_NUM_GROUPS]; 00913 XMC_ASSERT("ADC_MEASUREMENT_ADV_GetFifoDetailedResult:Invalid handle_ptr", (handle_ptr != NULL)) 00914 00915 result_register.res = XMC_VADC_GROUP_GetDetailedResult(group_ptrs[handle_ptr->group_index], 00916 handle_ptr->result_fifo_tail_number); 00917 return(result_register); 00918 } 00919 00920 #endif 00921 01001 __STATIC_INLINE ADC_MEASUREMENT_ADV_FAST_COMPARE_t ADC_MEASUREMENT_ADV_GetFastCompareResult(const 01002 ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr) 01003 { 01004 ADC_MEASUREMENT_ADV_FAST_COMPARE_t fast_compare_result; 01005 extern XMC_VADC_GROUP_t *const group_ptrs[XMC_VADC_MAXIMUM_NUM_GROUPS]; 01006 XMC_ASSERT("ADC_MEASUREMENT_ADV_GetFastCompareResult:Invalid handle_ptr", (handle_ptr != NULL)) 01007 01008 fast_compare_result = (ADC_MEASUREMENT_ADV_FAST_COMPARE_t)XMC_VADC_GROUP_GetFastCompareResult( 01009 group_ptrs[handle_ptr->group_index],(uint32_t) handle_ptr->ch_handle->result_reg_number); 01010 01011 return(fast_compare_result); 01012 } 01013 01089 ADC_MEASUREMENT_ADV_STATUS_t ADC_MEASUREMENT_ADV_SetFastCompareValue(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr, 01090 uint16_t compare_value); 01091 01159 void ADC_MEASUREMENT_ADV_SetSubtractionValue(const ADC_MEASUREMENT_ADV_t *const handle_ptr, 01160 ADC_MEASUREMENT_ADV_SUBTRATION_t subtraction_alignment, 01161 uint16_t subtraction_value); 01162 01236 void ADC_MEASUREMENT_ADV_ConfigureChannelClass(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr, 01237 const XMC_VADC_GROUP_CLASS_t *config); 01238 01301 void ADC_MEASUREMENT_ADV_SetAlternateReference(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr, 01302 const XMC_VADC_CHANNEL_REF_t reference_select); 01303 01304 #if (XMC_VADC_SHS_AVAILABLE == 1U) 01305 01365 void ADC_MEASUREMENT_ADV_SetChannelGain(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr, 01366 const ADC_MEASUREMENT_ADV_GAIN_t gain_factor); 01367 #endif 01368 01369 01448 void ADC_MEASUREMENT_ADV_SelectBoundary(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr, 01449 XMC_VADC_BOUNDARY_SELECT_t boundary, 01450 XMC_VADC_CHANNEL_BOUNDARY_t boundary_selection); 01451 01531 void ADC_MEASUREMENT_ADV_SetBoundaryUpper(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr, 01532 uint32_t boundary_value); 01533 01613 void ADC_MEASUREMENT_ADV_SetBoundaryLower(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr, 01614 uint32_t boundary_value); 01615 01616 01694 XMC_VADC_CHANNEL_ALIAS_t ADC_MEASUREMENT_ADV_GetAliasValue(const ADC_MEASUREMENT_ADV_CHANNEL_t *const handle_ptr); 01695 01696 #ifdef ADC_MEASUREMENT_ADV_SYNC_USED 01697 01780 void ADC_MEASUREMENT_ADV_SetIclass(const ADC_MEASUREMENT_ADV_t *const handle_ptr); 01781 #endif 01782 01783 #include "adc_measurement_adv_extern.h" 01784 #ifdef __cplusplus 01785 } 01786 #endif 01787 01788 #endif /* _ADC_MEASUREMENT_ADV_H_*/