ADC_MEASUREMENT_ADV: ADC_MEASUREMENT_ADV.h Source File

Modbus RTU XMC47

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_*/