00001
00093 #include "board.h"
00094 #include "print_funcs.h"
00095 #include "gpio.h"
00096 #include "pm.h"
00097 #include "adc.h"
00098
00099
00102
00103 #if BOARD == EVK1100
00104
00105 # define EXAMPLE_ADC_TEMPERATURE_CHANNEL 0
00106 # define EXAMPLE_ADC_TEMPERATURE_PIN AVR32_ADC_AD_0_PIN
00107 # define EXAMPLE_ADC_TEMPERATURE_FUNCTION AVR32_ADC_AD_0_FUNCTION
00108
00109 # define EXAMPLE_ADC_LIGHT_CHANNEL 2
00110 # define EXAMPLE_ADC_LIGHT_PIN AVR32_ADC_AD_2_PIN
00111 # define EXAMPLE_ADC_LIGHT_FUNCTION AVR32_ADC_AD_2_FUNCTION
00112
00113 # define EXAMPLE_ADC_POTENTIOMETER_CHANNEL 1
00114 # define EXAMPLE_ADC_POTENTIOMETER_PIN AVR32_ADC_AD_1_PIN
00115 # define EXAMPLE_ADC_POTENTIOMETER_FUNCTION AVR32_ADC_AD_1_FUNCTION
00116
00117
00118 #elif BOARD == EVK1101
00119
00120 # define EXAMPLE_ADC_TEMPERATURE_CHANNEL 7
00121 # define EXAMPLE_ADC_TEMPERATURE_PIN AVR32_ADC_AD_7_PIN
00122 # define EXAMPLE_ADC_TEMPERATURE_FUNCTION AVR32_ADC_AD_7_FUNCTION
00123
00124 # define EXAMPLE_ADC_LIGHT_CHANNEL 6
00125 # define EXAMPLE_ADC_LIGHT_PIN AVR32_ADC_AD_6_PIN
00126 # define EXAMPLE_ADC_LIGHT_FUNCTION AVR32_ADC_AD_6_FUNCTION
00127
00128
00129 #elif BOARD == EVK1104
00130
00131 # define EXAMPLE_ADC_LIGHT_CHANNEL 0
00132 # define EXAMPLE_ADC_LIGHT_PIN AVR32_ADC_AD_0_PIN
00133 # define EXAMPLE_ADC_LIGHT_FUNCTION AVR32_ADC_AD_0_FUNCTION
00134
00135
00136 #endif
00138
00139 volatile int true_var = TRUE;
00140
00144 int main( void )
00145 {
00146
00147 static const gpio_map_t ADC_GPIO_MAP =
00148 {
00149 #if BOARD == EVK1100 || BOARD == EVK1101
00150 {EXAMPLE_ADC_TEMPERATURE_PIN, EXAMPLE_ADC_TEMPERATURE_FUNCTION},
00151 #endif
00152 {EXAMPLE_ADC_LIGHT_PIN, EXAMPLE_ADC_LIGHT_FUNCTION},
00153 #if BOARD == EVK1100
00154 {EXAMPLE_ADC_POTENTIOMETER_PIN, EXAMPLE_ADC_POTENTIOMETER_FUNCTION}
00155 #endif
00156 };
00157
00158 volatile avr32_adc_t *adc = &AVR32_ADC;
00159
00160 #if BOARD == EVK1100 || BOARD == EVK1101
00161 signed short adc_value_temp = -1;
00162 #endif
00163 signed short adc_value_light = -1;
00164 #if BOARD == EVK1100
00165 signed short adc_value_pot = -1;
00166 #endif
00167
00168
00169 #if BOARD == EVK1100 || BOARD == EVK1101
00170 unsigned short adc_channel_temp = EXAMPLE_ADC_TEMPERATURE_CHANNEL;
00171 #endif
00172 unsigned short adc_channel_light = EXAMPLE_ADC_LIGHT_CHANNEL;
00173 #if BOARD == EVK1100
00174 unsigned short adc_channel_pot = EXAMPLE_ADC_POTENTIOMETER_CHANNEL;
00175 #endif
00176
00177 int i;
00178
00179
00180
00181 pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);
00182
00183
00184 init_dbg_rs232(FOSC0);
00185
00186
00187 gpio_enable_module(ADC_GPIO_MAP, sizeof(ADC_GPIO_MAP) / sizeof(ADC_GPIO_MAP[0]));
00188
00189
00190
00191
00192
00193 AVR32_ADC.mr |= 0x1 << AVR32_ADC_MR_PRESCAL_OFFSET;
00194 adc_configure(adc);
00195
00196
00197 #if BOARD == EVK1100 || BOARD == EVK1101
00198 adc_enable(adc,adc_channel_temp);
00199 #endif
00200 adc_enable(adc,adc_channel_light);
00201 #if BOARD == EVK1100
00202 adc_enable(adc,adc_channel_pot);
00203 #endif
00204
00205
00206
00207 while (true_var)
00208 {
00209
00210 for ( i=0 ; i < 1000000 ; i++);
00211
00212
00213 print_dbg("\x1B[2J\x1B[H\r\nADC Example\r\n");
00214
00215
00216 adc_start(adc);
00217
00218 #if BOARD == EVK1100 || BOARD == EVK1101
00219
00220 adc_value_temp = adc_get_value(adc, adc_channel_temp);
00221
00222 print_dbg("HEX Value for Channel temperature : 0x");
00223 print_dbg_hex(adc_value_temp);
00224 print_dbg("\r\n");
00225 #endif
00226
00227
00228 adc_value_light = adc_get_value(adc, adc_channel_light);
00229
00230 print_dbg("HEX Value for Channel light : 0x");
00231 print_dbg_hex(adc_value_light);
00232 print_dbg("\r\n");
00233
00234 #if BOARD == EVK1100
00235
00236 adc_value_pot = adc_get_value(adc, adc_channel_pot);
00237
00238 print_dbg("HEX Value for Channel pot : 0x");
00239 print_dbg_hex(adc_value_pot);
00240 print_dbg("\r\n");
00241 #endif
00242 }
00243
00244 #if BOARD == EVK1100 || BOARD == EVK1101
00245 adc_disable(adc,adc_channel_temp);
00246 #endif
00247 adc_disable(adc,adc_channel_light);
00248 #if BOARD == EVK1100
00249 adc_disable(adc,adc_channel_pot);
00250 #endif
00251 return 0;
00252 }