1 /*******************************************************************************
\r
2 * (c) Copyright 2009 Actel Corporation. All rights reserved.
\r
4 * SVN $Revision: 2905 $
\r
5 * SVN $Date: 2010-08-20 14:03:28 +0100 (Fri, 20 Aug 2010) $
\r
8 #include "mss_ace_configurator.h"
\r
9 #include "../../CMSIS/a2fxxxm3.h"
\r
10 #include "../../CMSIS/mss_assert.h"
\r
11 #include "../../drivers_config/mss_ace/ace_handles.h"
\r
12 #include "../../drivers_config/mss_ace/ace_config.h"
\r
18 /*-------------------------------------------------------------------------*//**
\r
21 extern ace_channel_desc_t g_ace_channel_desc_table[ACE_NB_OF_INPUT_CHANNELS];
\r
22 extern ace_adc_config_t g_ace_adc_config[ACE_NB_OF_ADC];
\r
23 extern const uint32_t g_ace_current_resistors[ACE_NB_OF_CURRENT_MONITORS];
\r
25 /*-------------------------------------------------------------------------*//**
\r
28 static uint16_t convert_mV_to_ppe_value
\r
30 ace_channel_handle_t channel_handle,
\r
34 /*-------------------------------------------------------------------------*//**
\r
37 void ace_init_convert(void);
\r
39 /*-------------------------------------------------------------------------*//**
\r
42 #define VOLTAGE_CHANNEL 0u
\r
43 #define CURRENT_CHANNEL 1u
\r
44 #define TEMPERATURE_CHANNEL 2u
\r
45 #define INVALID_CHANNEL 0xFFu
\r
47 static const uint8_t channel_type_lut[] =
\r
49 VOLTAGE_CHANNEL, /* ADC0_1P5V = 0 */
\r
50 VOLTAGE_CHANNEL, /* ABPS0 = 1 */
\r
51 VOLTAGE_CHANNEL, /* ABPS1 = 2 */
\r
52 CURRENT_CHANNEL, /* CM0 = 3 */
\r
53 TEMPERATURE_CHANNEL, /* TM0 = 4 */
\r
54 VOLTAGE_CHANNEL, /* ABPS2 = 5 */
\r
55 VOLTAGE_CHANNEL, /* ABPS3 = 6 */
\r
56 CURRENT_CHANNEL, /* CM1 = 7 */
\r
57 TEMPERATURE_CHANNEL, /* TM1 = 8 */
\r
58 VOLTAGE_CHANNEL, /* ADC0 = 9 */
\r
59 VOLTAGE_CHANNEL, /* ADC1 = 10 */
\r
60 VOLTAGE_CHANNEL, /* ADC2 = 11 */
\r
61 VOLTAGE_CHANNEL, /* ADC3 = 12 */
\r
64 VOLTAGE_CHANNEL, /* SDD0_IN = 15 */
\r
66 VOLTAGE_CHANNEL, /* ADC1_1P5V = 16 */
\r
67 VOLTAGE_CHANNEL, /* ABPS4 = 17 */
\r
68 VOLTAGE_CHANNEL, /* ABPS5 = 18 */
\r
69 CURRENT_CHANNEL, /* CM2 = 19 */
\r
70 TEMPERATURE_CHANNEL, /* TM2 = 20 */
\r
71 VOLTAGE_CHANNEL, /* ABPS6 = 21 */
\r
72 VOLTAGE_CHANNEL, /* ABPS7 = 22 */
\r
73 CURRENT_CHANNEL, /* CM3 = 23 */
\r
74 TEMPERATURE_CHANNEL, /* TM3 = 24 */
\r
75 VOLTAGE_CHANNEL, /* ADC4 = 25 */
\r
76 VOLTAGE_CHANNEL, /* ADC5 = 26 */
\r
77 VOLTAGE_CHANNEL, /* ADC6 = 27 */
\r
78 VOLTAGE_CHANNEL, /* ADC7 = 28 */
\r
81 VOLTAGE_CHANNEL, /* SDD1_IN = 31 */
\r
83 VOLTAGE_CHANNEL, /* ADC2_1P5V = 32 */
\r
84 VOLTAGE_CHANNEL, /* ABPS8 = 33 */
\r
85 VOLTAGE_CHANNEL, /* ABPS9 = 34 */
\r
86 CURRENT_CHANNEL, /* CM4 = 35 */
\r
87 TEMPERATURE_CHANNEL, /* TM4 = 36 */
\r
88 VOLTAGE_CHANNEL, /* ABPS10 = 37 */
\r
89 VOLTAGE_CHANNEL, /* ABPS11 = 38 */
\r
90 CURRENT_CHANNEL, /* CM5 = 39 */
\r
91 TEMPERATURE_CHANNEL, /* TM5 = 40 */
\r
92 VOLTAGE_CHANNEL, /* ADC8 = 41 */
\r
93 VOLTAGE_CHANNEL, /* ADC9 = 42 */
\r
94 VOLTAGE_CHANNEL, /* ADC10 = 43 */
\r
95 VOLTAGE_CHANNEL, /* ADC11 = 44 */
\r
98 VOLTAGE_CHANNEL /* SDD2_IN = 47 */
\r
101 static const uint8_t channel_quad_lut[] =
\r
103 0xFFu, /* ADC0_1P5V = 0 */
\r
104 0u, /* ABPS0 = 1 */
\r
105 0u, /* ABPS1 = 2 */
\r
108 1u, /* ABPS2 = 5 */
\r
109 1u, /* ABPS3 = 6 */
\r
112 0xFFu, /* ADC0 = 9 */
\r
113 0xFFu, /* ADC1 = 10 */
\r
114 0xFFu, /* ADC2 = 11 */
\r
115 0xFFu, /* ADC3 = 12 */
\r
118 0xFFu, /* SDD0_IN = 15 */
\r
120 0xFFu, /* ADC1_1P5V = 16 */
\r
121 2u, /* ABPS4 = 17 */
\r
122 2u, /* ABPS5 = 18 */
\r
125 3u, /* ABPS6 = 21 */
\r
126 3u, /* ABPS7 = 22 */
\r
129 0xFFu, /* ADC4 = 25 */
\r
130 0xFFu, /* ADC5 = 26 */
\r
131 0xFFu, /* ADC6 = 27 */
\r
132 0xFFu, /* ADC7 = 28 */
\r
135 0xFFu, /* SDD1_IN = 31 */
\r
137 0xFFu, /* ADC2_1P5V = 32 */
\r
138 4u, /* ABPS8 = 33 */
\r
139 4u, /* ABPS9 = 34 */
\r
142 5u, /* ABPS10 = 37 */
\r
143 5u, /* ABPS11 = 38 */
\r
146 0xFFu, /* ADC8 = 41 */
\r
147 0xFFu, /* ADC9 = 42 */
\r
148 0xFFu, /* ADC10 = 43 */
\r
149 0xFFu, /* ADC11 = 44 */
\r
152 0xFFu /* SDD2_IN = 47 */
\r
155 /*-------------------------------------------------------------------------*//**
\r
158 #define NON_ABPS_CHANNEL 0xFFu
\r
159 #define MAX_NB_OF_APBS 12u
\r
161 /*-------------------------------------------------------------------------*//**
\r
162 * Lookup of the quad to which an ABPS belongs
\r
164 static const uint8_t abps_channel_lut[] =
\r
166 NON_ABPS_CHANNEL, /* ADC0_1P5V = 0 */
\r
167 0u, /* ABPS0 = 1 */
\r
168 0u, /* ABPS1 = 2 */
\r
169 NON_ABPS_CHANNEL, /* CM0 = 3 */
\r
170 NON_ABPS_CHANNEL, /* TM0 = 4 */
\r
171 1u, /* ABPS2 = 5 */
\r
172 1u, /* ABPS3 = 6 */
\r
173 NON_ABPS_CHANNEL, /* CM1 = 7 */
\r
174 NON_ABPS_CHANNEL, /* TM1 = 8 */
\r
175 NON_ABPS_CHANNEL, /* ADC0 = 9 */
\r
176 NON_ABPS_CHANNEL, /* ADC1 = 10 */
\r
177 NON_ABPS_CHANNEL, /* ADC2 = 11 */
\r
178 NON_ABPS_CHANNEL, /* ADC3 = 12 */
\r
181 NON_ABPS_CHANNEL, /* SDD0_IN = 15 */
\r
183 NON_ABPS_CHANNEL, /* ADC1_1P5V = 16 */
\r
184 2u, /* ABPS4 = 17 */
\r
185 2u, /* ABPS5 = 18 */
\r
186 NON_ABPS_CHANNEL, /* CM2 = 19 */
\r
187 NON_ABPS_CHANNEL, /* TM2 = 20 */
\r
188 3u, /* ABPS6 = 21 */
\r
189 3u, /* ABPS7 = 22 */
\r
190 NON_ABPS_CHANNEL, /* CM3 = 23 */
\r
191 NON_ABPS_CHANNEL, /* TM3 = 24 */
\r
192 NON_ABPS_CHANNEL, /* ADC4 = 25 */
\r
193 NON_ABPS_CHANNEL, /* ADC5 = 26 */
\r
194 NON_ABPS_CHANNEL, /* ADC6 = 27 */
\r
195 NON_ABPS_CHANNEL, /* ADC7 = 28 */
\r
198 NON_ABPS_CHANNEL, /* SDD1_IN = 31 */
\r
200 NON_ABPS_CHANNEL, /* ADC2_1P5V = 32 */
\r
201 4u, /* ABPS8 = 33 */
\r
202 4u, /* ABPS9 = 34 */
\r
203 NON_ABPS_CHANNEL, /* CM4 = 35 */
\r
204 NON_ABPS_CHANNEL, /* TM4 = 36 */
\r
205 5u, /* ABPS10 = 37 */
\r
206 5u, /* ABPS11 = 38 */
\r
207 NON_ABPS_CHANNEL, /* CM5 = 39 */
\r
208 NON_ABPS_CHANNEL, /* TM5 = 40 */
\r
209 NON_ABPS_CHANNEL, /* ADC8 = 41 */
\r
210 NON_ABPS_CHANNEL, /* ADC9 = 42 */
\r
211 NON_ABPS_CHANNEL, /* ADC10 = 43 */
\r
212 NON_ABPS_CHANNEL, /* ADC11 = 44 */
\r
215 NON_ABPS_CHANNEL /* SDD2_IN = 47 */
\r
218 static const uint8_t abps_idx_lut[] =
\r
220 NON_ABPS_CHANNEL, /* ADC0_1P5V = 0 */
\r
221 0u, /* ABPS0 = 1 */
\r
222 1u, /* ABPS1 = 2 */
\r
223 NON_ABPS_CHANNEL, /* CM0 = 3 */
\r
224 NON_ABPS_CHANNEL, /* TM0 = 4 */
\r
225 2u, /* ABPS2 = 5 */
\r
226 3u, /* ABPS3 = 6 */
\r
227 NON_ABPS_CHANNEL, /* CM1 = 7 */
\r
228 NON_ABPS_CHANNEL, /* TM1 = 8 */
\r
229 NON_ABPS_CHANNEL, /* ADC0 = 9 */
\r
230 NON_ABPS_CHANNEL, /* ADC1 = 10 */
\r
231 NON_ABPS_CHANNEL, /* ADC2 = 11 */
\r
232 NON_ABPS_CHANNEL, /* ADC3 = 12 */
\r
235 NON_ABPS_CHANNEL, /* SDD0_IN = 15 */
\r
237 NON_ABPS_CHANNEL, /* ADC1_1P5V = 16 */
\r
238 4u, /* ABPS4 = 17 */
\r
239 5u, /* ABPS5 = 18 */
\r
240 NON_ABPS_CHANNEL, /* CM2 = 19 */
\r
241 NON_ABPS_CHANNEL, /* TM2 = 20 */
\r
242 6u, /* ABPS6 = 21 */
\r
243 7u, /* ABPS7 = 22 */
\r
244 NON_ABPS_CHANNEL, /* CM3 = 23 */
\r
245 NON_ABPS_CHANNEL, /* TM3 = 24 */
\r
246 NON_ABPS_CHANNEL, /* ADC4 = 25 */
\r
247 NON_ABPS_CHANNEL, /* ADC5 = 26 */
\r
248 NON_ABPS_CHANNEL, /* ADC6 = 27 */
\r
249 NON_ABPS_CHANNEL, /* ADC7 = 28 */
\r
252 NON_ABPS_CHANNEL, /* SDD1_IN = 31 */
\r
254 NON_ABPS_CHANNEL, /* ADC2_1P5V = 32 */
\r
255 8u, /* ABPS8 = 33 */
\r
256 9u, /* ABPS9 = 34 */
\r
257 NON_ABPS_CHANNEL, /* CM4 = 35 */
\r
258 NON_ABPS_CHANNEL, /* TM4 = 36 */
\r
259 10u, /* ABPS10 = 37 */
\r
260 11u, /* ABPS11 = 38 */
\r
261 NON_ABPS_CHANNEL, /* CM5 = 39 */
\r
262 NON_ABPS_CHANNEL, /* TM5 = 40 */
\r
263 NON_ABPS_CHANNEL, /* ADC8 = 41 */
\r
264 NON_ABPS_CHANNEL, /* ADC9 = 42 */
\r
265 NON_ABPS_CHANNEL, /* ADC10 = 43 */
\r
266 NON_ABPS_CHANNEL, /* ADC11 = 44 */
\r
269 NON_ABPS_CHANNEL /* SDD2_IN = 47 */
\r
272 /*-------------------------------------------------------------------------*//**
\r
275 static const int8_t apbs_gain_lut[] =
\r
283 static const int16_t apbs_range[] =
\r
291 static uint8_t g_gdec_lut[MAX_NB_OF_APBS];
\r
292 static channel_type_t channel_type_lut_h[ACE_NB_OF_INPUT_CHANNELS];
\r
295 /*-------------------------------------------------------------------------*//**
\r
299 ACE_get_channel_type
\r
301 ace_channel_handle_t channel_handle
\r
304 channel_type_t channel_type = VOLTAGE;
\r
306 ASSERT(channel_handle < ACE_NB_OF_INPUT_CHANNELS);
\r
308 if((int32_t)channel_handle < ACE_NB_OF_INPUT_CHANNELS)
\r
310 channel_type = channel_type_lut_h[channel_handle];
\r
314 channel_type = VOLTAGE;
\r
317 return channel_type;
\r
320 /*-------------------------------------------------------------------------*//**
\r
323 uint32_t ACE_convert_adc_input_to_mV
\r
325 ace_channel_handle_t channel_handle,
\r
326 uint16_t sample_value
\r
330 adc_channel_id_t channel_id;
\r
333 channel_id = g_ace_channel_desc_table[channel_handle].signal_id;
\r
334 adc_id = (uint8_t)channel_id >> 4u;
\r
335 voltage = ( g_ace_adc_config[adc_id].va_ref * (uint32_t)sample_value ) / g_ace_adc_config[adc_id].adc_resolution;
\r
340 /*-------------------------------------------------------------------------*//**
\r
343 #define PPE_SAMPLES_RESOLUTION 4095u
\r
345 /*-------------------------------------------------------------------------*//**
\r
348 void ace_init_convert(void)
\r
352 uint32_t saved_pc2_ctrl;
\r
354 /* Pause the SSE PC2 while accesses to ACB from APB3 are taking place. */
\r
355 saved_pc2_ctrl = ACE->PC2_CTRL;
\r
356 ACE->PC2_CTRL = 0u;
\r
358 /* Populate the g_gdec_lut look-up table. */
\r
359 for(abps_idx = 0u; abps_idx < MAX_NB_OF_APBS; ++abps_idx)
\r
362 uint8_t acb_config_byte;
\r
363 uint32_t channel_is_abps2;
\r
365 quad_id = abps_idx / 2u;
\r
366 acb_config_byte = ACE->ACB_DATA[quad_id].b8;
\r
367 channel_is_abps2 = abps_idx & 0x01uL;
\r
368 if(channel_is_abps2)
\r
371 g_gdec_lut[abps_idx] = (acb_config_byte >> 5u) & 0x03u;
\r
376 g_gdec_lut[abps_idx] = (acb_config_byte >> 1u) & 0x03u;
\r
380 /* Populate the channel_type_lut_h look-up table. */
\r
381 for(channel = 0; channel < ACE_NB_OF_INPUT_CHANNELS; ++channel)
\r
384 uint8_t acb_config_byte;
\r
385 adc_channel_id_t channel_id;
\r
386 channel_type_t channel_type;
\r
388 channel_id = g_ace_channel_desc_table[channel].signal_id;
\r
389 quad_id = channel_quad_lut[channel_id];
\r
391 switch (channel_type_lut[channel_id])
\r
393 case VOLTAGE_CHANNEL:
\r
394 channel_type = VOLTAGE;
\r
397 case CURRENT_CHANNEL:
\r
398 ASSERT( quad_id != 0xFFu );
\r
399 acb_config_byte = ACE->ACB_DATA[quad_id].b9;
\r
400 if ( acb_config_byte & 0x01u )
\r
402 channel_type = VOLTAGE;
\r
406 channel_type = CURRENT;
\r
410 case TEMPERATURE_CHANNEL:
\r
411 ASSERT( quad_id != 0xFFu );
\r
412 acb_config_byte = ACE->ACB_DATA[quad_id].b10;
\r
413 if ( acb_config_byte & 0x01u )
\r
415 channel_type = VOLTAGE;
\r
419 channel_type = TEMPERATURE;
\r
425 channel_type = VOLTAGE;
\r
429 channel_type_lut_h[channel] = channel_type;
\r
432 /* Restore SSE PC2 operations. */
\r
433 ACE->PC2_CTRL = saved_pc2_ctrl;
\r
436 /*-------------------------------------------------------------------------*//**
\r
439 int32_t ACE_convert_to_mV
\r
441 ace_channel_handle_t channel_handle,
\r
442 uint16_t sample_value
\r
445 uint32_t adc_voltage;
\r
447 adc_channel_id_t channel_id;
\r
451 channel_id = g_ace_channel_desc_table[channel_handle].signal_id;
\r
452 adc_id = (uint8_t)channel_id >> 4u;
\r
453 adc_voltage = ( g_ace_adc_config[adc_id].va_ref * (uint32_t)sample_value ) / PPE_SAMPLES_RESOLUTION;
\r
454 voltage = (int32_t)adc_voltage;
\r
456 apbs_idx = abps_idx_lut[channel_id];
\r
457 if ( abps_channel_lut[channel_id] != NON_ABPS_CHANNEL )
\r
460 gdec = g_gdec_lut[apbs_idx];
\r
461 voltage = (voltage * apbs_gain_lut[gdec]) - apbs_range[gdec];
\r
466 /*-------------------------------------------------------------------------*//**
\r
469 uint32_t ACE_convert_to_mA
\r
471 ace_channel_handle_t channel_handle,
\r
472 uint16_t sample_value
\r
475 uint32_t current = 0u;
\r
477 ASSERT(channel_handle < ACE_NB_OF_INPUT_CHANNELS);
\r
479 if((int32_t)channel_handle < ACE_NB_OF_INPUT_CHANNELS)
\r
481 adc_channel_id_t channel_id;
\r
482 uint8_t current_monitor_idx;
\r
484 channel_id = g_ace_channel_desc_table[channel_handle].signal_id;
\r
485 ASSERT(channel_id < sizeof(channel_type_lut));
\r
486 if(CURRENT_CHANNEL == channel_type_lut[channel_id])
\r
491 /* Compute index into g_ace_current_resistors[] from the current
\r
492 * channel number. This uses bit 2, 4 and 5 of the channel number
\r
493 * to derive the index as follows:
\r
494 * channel name : channel number : index
\r
502 current_monitor_idx
\r
503 = (((uint8_t)channel_id & 0x04u) >> 2u) + (((uint8_t)channel_id & 0x30u) >> 3u);
\r
505 if(current_monitor_idx < (uint8_t)ACE_NB_OF_CURRENT_MONITORS)
\r
507 /* Retrieve the current sensing external resistor value from
\r
508 * the ACE configuration data generated by the ACE configurator. */
\r
509 resistor = g_ace_current_resistors[current_monitor_idx];
\r
511 /* Compute mA current value taking into account the amplication
\r
512 * factor of 50 used within the current monitor hardware. */
\r
513 voltage = ACE_convert_adc_input_to_mV(channel_handle, sample_value);
\r
514 current = (voltage * (1000u / 50u)) / resistor;
\r
523 /*-------------------------------------------------------------------------*//**
\r
526 uint32_t ACE_convert_to_Kelvin
\r
528 ace_channel_handle_t channel_handle,
\r
529 uint16_t sample_value
\r
532 uint32_t temperature;
\r
535 voltage = ACE_convert_adc_input_to_mV( channel_handle, sample_value );
\r
537 /* Tk = (V * 10^3) / 2.5 */
\r
538 temperature = (voltage * 10u) / 25u;
\r
540 return temperature;
\r
543 /*-------------------------------------------------------------------------*//**
\r
546 int32_t ACE_convert_to_Celsius
\r
548 ace_channel_handle_t channel_handle,
\r
549 uint16_t sample_value
\r
552 int32_t temperature;
\r
555 voltage = (int32_t)ACE_convert_adc_input_to_mV( channel_handle, sample_value );
\r
557 /* Tk = (V * 10^3) / 2.5 */
\r
558 /* Tc = Tk - 273.15 */
\r
559 temperature = (voltage * 4) - 2731;
\r
561 return temperature;
\r
564 /*-------------------------------------------------------------------------*//**
\r
567 int32_t ACE_convert_to_Fahrenheit
\r
569 ace_channel_handle_t channel_handle,
\r
570 uint16_t sample_value
\r
573 int32_t temperature;
\r
575 temperature = (int32_t)ACE_convert_to_Kelvin( channel_handle, sample_value );
\r
577 /* F = (K * 9/5) - 459.67 */
\r
578 temperature = ((temperature * 9) / 5) - 459;
\r
580 return temperature;
\r
583 /*-------------------------------------------------------------------------*//**
\r
586 const uint8_t * ACE_get_channel_name
\r
588 ace_channel_handle_t channel_handle
\r
591 const uint8_t * p_channel_name = 0;
\r
593 if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES)
\r
595 p_channel_name = g_ace_channel_desc_table[channel_handle].p_sz_channel_name;
\r
598 return p_channel_name;
\r
601 /*-------------------------------------------------------------------------*//**
\r
604 uint16_t ACE_convert_mV_to_adc_value
\r
606 ace_channel_handle_t channel_handle,
\r
610 uint16_t sample_value;
\r
611 adc_channel_id_t channel_id;
\r
614 channel_id = g_ace_channel_desc_table[channel_handle].signal_id;
\r
615 adc_id = (uint8_t)channel_id >> 4u;
\r
617 if (voltage > g_ace_adc_config[adc_id].va_ref)
\r
619 sample_value = g_ace_adc_config[adc_id].adc_resolution - 1u;
\r
623 sample_value = (uint16_t)((voltage * (g_ace_adc_config[adc_id].adc_resolution - 1)) / g_ace_adc_config[adc_id].va_ref);
\r
626 return sample_value;
\r
629 /*-------------------------------------------------------------------------*//**
\r
632 static uint16_t convert_mV_to_ppe_value
\r
634 ace_channel_handle_t channel_handle,
\r
638 uint16_t sample_value;
\r
639 adc_channel_id_t channel_id;
\r
642 channel_id = g_ace_channel_desc_table[channel_handle].signal_id;
\r
643 adc_id = (uint8_t)channel_id >> 4u;
\r
645 if (voltage > g_ace_adc_config[adc_id].va_ref)
\r
647 sample_value = PPE_SAMPLES_RESOLUTION;
\r
651 sample_value = (uint16_t)((voltage * PPE_SAMPLES_RESOLUTION) / g_ace_adc_config[adc_id].va_ref);
\r
654 return sample_value;
\r
657 #define MAX_PPE_SAMPLE_VALUE 0x0FFFu
\r
659 /*-------------------------------------------------------------------------*//**
\r
662 uint16_t ACE_convert_from_mV
\r
664 ace_channel_handle_t channel_handle,
\r
668 uint16_t sample_value;
\r
669 adc_channel_id_t channel_id;
\r
671 uint32_t adc_voltage;
\r
673 channel_id = g_ace_channel_desc_table[channel_handle].signal_id;
\r
674 adc_id = (uint8_t)channel_id >> 4u;
\r
676 if ( abps_channel_lut[channel_id] == NON_ABPS_CHANNEL )
\r
680 adc_voltage = (uint32_t)voltage;
\r
692 apbs_idx = abps_idx_lut[channel_id];
\r
693 gdec = g_gdec_lut[apbs_idx];
\r
694 voltage = voltage + apbs_range[gdec];
\r
697 adc_voltage = (uint32_t)voltage;
\r
698 adc_voltage = adc_voltage / (uint8_t)apbs_gain_lut[gdec];
\r
706 sample_value = (uint16_t)((adc_voltage * PPE_SAMPLES_RESOLUTION) / g_ace_adc_config[adc_id].va_ref);
\r
708 if (sample_value > MAX_PPE_SAMPLE_VALUE)
\r
710 sample_value = MAX_PPE_SAMPLE_VALUE;
\r
712 return sample_value;
\r
715 /*-------------------------------------------------------------------------*//**
\r
718 uint16_t ACE_convert_from_mA
\r
720 ace_channel_handle_t channel_handle,
\r
724 uint16_t sample_value;
\r
726 uint32_t resistor = 1u;
\r
728 voltage = current * 50u * resistor;
\r
729 sample_value = convert_mV_to_ppe_value( channel_handle, voltage );
\r
731 if (sample_value > MAX_PPE_SAMPLE_VALUE)
\r
733 sample_value = MAX_PPE_SAMPLE_VALUE;
\r
735 return sample_value;
\r
738 /*-------------------------------------------------------------------------*//**
\r
741 uint16_t ACE_convert_from_Kelvin
\r
743 ace_channel_handle_t channel_handle,
\r
744 uint32_t temperature
\r
747 uint16_t sample_value;
\r
750 voltage = (temperature * 25u) / 10u;
\r
751 sample_value = convert_mV_to_ppe_value( channel_handle, voltage );
\r
753 if (sample_value > MAX_PPE_SAMPLE_VALUE)
\r
755 sample_value = MAX_PPE_SAMPLE_VALUE;
\r
757 return sample_value;
\r
760 /*-------------------------------------------------------------------------*//**
\r
763 uint16_t ACE_convert_from_Celsius
\r
765 ace_channel_handle_t channel_handle,
\r
766 int32_t temperature
\r
769 uint16_t sample_value;
\r
772 temperature = temperature + 2731;
\r
773 voltage = (uint32_t)temperature / 4u;
\r
774 sample_value = convert_mV_to_ppe_value( channel_handle, voltage );
\r
776 if (sample_value > MAX_PPE_SAMPLE_VALUE)
\r
778 sample_value = MAX_PPE_SAMPLE_VALUE;
\r
780 return sample_value;
\r
783 /*-------------------------------------------------------------------------*//**
\r
786 uint16_t ACE_convert_from_Fahrenheit
\r
788 ace_channel_handle_t channel_handle,
\r
789 int32_t temperature
\r
792 uint16_t sample_value;
\r
795 temperature = temperature + 459;
\r
796 kelvin = (uint32_t)temperature;
\r
797 kelvin = (kelvin * 5u) / 9u;
\r
799 sample_value = ACE_convert_from_Kelvin( channel_handle, kelvin );
\r
801 if (sample_value > MAX_PPE_SAMPLE_VALUE)
\r
803 sample_value = MAX_PPE_SAMPLE_VALUE;
\r
805 return sample_value;
\r
808 /*-------------------------------------------------------------------------*//**
\r
811 uint16_t ACE_translate_pdma_value
\r
813 uint32_t pdma_value,
\r
814 adc_channel_id_t * channel_id
\r
817 uint16_t ppe_value;
\r
819 ppe_value = (pdma_value >> 8u) & 0xFFFFu;
\r
820 if ( channel_id != 0 )
\r
822 *channel_id = (adc_channel_id_t)((pdma_value >> 24u) & 0xFFu);
\r