Definition in file main.c.
#include "compiler.h"
#include "board.h"
#include "power_clocks_lib.h"
#include "dsp.h"
#include "gui.h"
#include "controller.h"
#include "gpio.h"
#include "print_funcs.h"
#include "intc.h"
#include "flashc.h"
#include "adcifa.h"
#include "twim.h"
#include "cycle_counter.h"
#include "conf_at42qt1060.h"
#include "lin_task.h"
#include "can_task.h"
#include "conf_demo.h"
Go to the source code of this file.
Enumerations | |
enum | state_function { STATE_FCT_IDLE, STATE_FCT_FUNCTION1, STATE_FCT_FUNCTION2, STATE_FCT_FUNCTION3, STATE_FCT_FUNCTION4, STATE_FCT_ZOOM } |
enum | state_master { STATE_IDLE, STATE_SOURCE1, STATE_OUTPUT1, STATE_OUTPUT2, STATE_OUTPUT3 } |
Functions | |
void | adc_process_init (void) |
ADC Process Init. | |
void | adc_process_task (void) |
ADC Process Task. | |
void | init_sys_clocks (void) |
Initializes the MCU system clocks. | |
int | main (void) |
Main File Section:
| |
static Bool | state_machine_global (int source_id, enum state_function *state) |
Global State Machine:
| |
static void | state_machine_task (void) |
Navigation State Machine:
| |
static void | twi_init (void) |
TWI Initialisation for QTouch Controller. | |
Variables | |
volatile U16 | adc_current_conversion |
S16 | adc_values_seq0 [NUMBER_OF_INPUTS_ADC_SEQ0] |
S16 | adc_values_seq1 [NUMBER_OF_INPUTS_ADC_SEQ1] |
volatile avr32_adcifa_t * | adcifa = &AVR32_ADCIFA |
adcifa_opt_t | adcifa_opt |
adcifa_sequencer_conversion_opt_t | adcifa_sequence_conversion_opt_seq0 [NUMBER_OF_INPUTS_ADC_SEQ0] |
adcifa_sequencer_conversion_opt_t | adcifa_sequence_conversion_opt_seq1 [NUMBER_OF_INPUTS_ADC_SEQ1] |
adcifa_sequencer_opt_t | adcifa_sequence_opt |
volatile Bool | input_fft_view = FALSE |
static Bool | new_state_fct = FALSE |
volatile Bool | output_fft_view = FALSE |
A_ALIGNED dsp16_t | signal1_buf [BUFFER_LENGTH] |
A_ALIGNED dsp16_t | signal4_buf [BUFFER_LENGTH] |
static enum state_master | state = STATE_IDLE |
static enum state_function | state_fct = STATE_FCT_IDLE |
volatile Bool | zoom_view = FALSE |
volatile int | zoom_view_id |
enum state_function |
STATE_FCT_IDLE | |
STATE_FCT_FUNCTION1 | |
STATE_FCT_FUNCTION2 | |
STATE_FCT_FUNCTION3 | |
STATE_FCT_FUNCTION4 | |
STATE_FCT_ZOOM |
Definition at line 139 of file main.c.
00140 { 00141 STATE_FCT_IDLE, 00142 STATE_FCT_FUNCTION1, 00143 STATE_FCT_FUNCTION2, 00144 STATE_FCT_FUNCTION3, 00145 STATE_FCT_FUNCTION4, 00146 STATE_FCT_ZOOM 00147 };
enum state_master |
Definition at line 130 of file main.c.
00131 { 00132 STATE_IDLE, 00133 STATE_SOURCE1, 00134 STATE_OUTPUT1, 00135 STATE_OUTPUT2, 00136 STATE_OUTPUT3 00137 };
void adc_process_init | ( | void | ) |
ADC Process Init.
Definition at line 364 of file main.c.
References adcifa, adcifa_opt, adcifa_sequence_conversion_opt_seq0, adcifa_sequence_conversion_opt_seq1, adcifa_sequence_opt, INPUT1_ADC_FUNCTION, INPUT1_ADC_PIN, INPUT2_ADC_FUNCTION, and INPUT2_ADC_PIN.
Referenced by main().
00365 { 00366 // GPIO pin/adc-function map. 00367 static const gpio_map_t ADCIFA_GPIO_MAP = 00368 { 00369 {AVR32_ADCREF0_PIN,AVR32_ADCREF0_FUNCTION}, 00370 {AVR32_ADCREFP_PIN,AVR32_ADCREFP_FUNCTION}, 00371 {AVR32_ADCREFN_PIN,AVR32_ADCREFN_FUNCTION}, 00372 {INPUT1_ADC_PIN, INPUT1_ADC_FUNCTION}, 00373 {INPUT2_ADC_PIN, INPUT2_ADC_FUNCTION} 00374 }; 00375 00376 // Assign and enable GPIO pins to the ADC function. 00377 gpio_enable_module(ADCIFA_GPIO_MAP, sizeof(ADCIFA_GPIO_MAP) / sizeof(ADCIFA_GPIO_MAP[0])); 00378 00379 // Configure ADCIFA core 00380 adcifa_configure(adcifa, &adcifa_opt, FOSC0); 00381 00382 // Configure ADCIFA sequencer 0 00383 adcifa_configure_sequencer(adcifa, 0, &adcifa_sequence_opt, adcifa_sequence_conversion_opt_seq0); 00384 00385 // Configure ADCIFA sequencer 1 00386 adcifa_configure_sequencer(adcifa, 1, &adcifa_sequence_opt, adcifa_sequence_conversion_opt_seq1); 00387 }
void adc_process_task | ( | void | ) |
ADC Process Task.
Definition at line 393 of file main.c.
References adc_current_conversion, adc_values_seq0, adc_values_seq1, adcifa, adcifa_sequence_opt, BUFFER_LENGTH, signal1_buf, and signal4_buf.
Referenced by main().
00394 { 00395 int i; 00396 00397 // Start ADCIFA sequencer 0 00398 adcifa_start_sequencer(adcifa, 0); 00399 00400 // Get Values from sequencer 0 00401 if (adcifa_get_values_from_sequencer(adcifa, 0, &adcifa_sequence_opt, adc_values_seq0)==ADCIFA_STATUS_COMPLETED) 00402 { 00403 for (i=BUFFER_LENGTH-1;i>=1;i--) 00404 { 00405 signal1_buf[i] = signal1_buf[i-1]; 00406 } 00407 adc_current_conversion = adc_values_seq0[0]; 00408 signal1_buf[0] = ( adc_current_conversion*0x20) - 0x8000; 00409 } 00410 00411 // Start ADCIFA sequencer 1 00412 adcifa_start_sequencer(adcifa, 1); 00413 00414 // Get Values from sequencer 1 00415 if (adcifa_get_values_from_sequencer(adcifa, 1, &adcifa_sequence_opt, adc_values_seq1)==ADCIFA_STATUS_COMPLETED) 00416 { 00417 for (i=BUFFER_LENGTH-1;i>=1;i--) 00418 { 00419 signal4_buf[i] = signal4_buf[i-1]; 00420 } 00421 signal4_buf[0] = ( (~adc_values_seq1[0])*0x20) - 0x8000; 00422 } 00423 }
void init_sys_clocks | ( | void | ) |
int main | ( | void | ) |
Main File Section:
Definition at line 455 of file main.c.
References adc_process_init(), adc_process_task(), can_task(), can_task_init(), controller_init(), controller_task(), FCPU_HZ, FHSB_HZ, FPBA_HZ, FPBB_HZ, gui_init(), gui_task(), init_sys_clocks(), lin_task(), lin_task_init(), state_machine_task(), and twi_init().
00456 { 00457 // Initialize System Clock 00458 init_sys_clocks(); 00459 00460 // Initialize USART 00461 init_dbg_rs232(FPBA_HZ); 00462 00463 // Print Startup Message 00464 print_dbg("AT32UC3C-EK DEMO\n"); 00465 00466 // Initialize ADC for Potentiometer and Microphone 00467 adc_process_init(); 00468 00469 // Initialize Interrupts 00470 INTC_init_interrupts(); 00471 00472 // Initialize TWI Interface 00473 twi_init(); 00474 00475 // GUI, Controller and DSP process init 00476 gui_init(FCPU_HZ, FHSB_HZ, FPBB_HZ, FPBA_HZ); 00477 00478 #ifndef BUTTON_CONTROL 00479 controller_init(FCPU_HZ, FHSB_HZ, FPBA_HZ, FPBB_HZ); 00480 #endif 00481 00482 // Initialize LIN Interface 00483 lin_task_init(); 00484 00485 // Initialize CAN Interface 00486 can_task_init(); 00487 00488 Enable_global_interrupt(); 00489 00490 // Main loop 00491 while (1) 00492 { 00493 // Call Lin Task for communication management 00494 lin_task(); 00495 // Call CAN Task for communication management 00496 can_task(); 00497 // Call Gui Task for display update 00498 gui_task(); 00499 // Call Controller Task for control Update 00500 #ifndef BUTTON_CONTROL 00501 controller_task(); 00502 #endif 00503 // Call ADC Task for sensors update 00504 adc_process_task(); 00505 // Here add the other concurrent process 00506 state_machine_task(); 00507 } 00508 }
static Bool state_machine_global | ( | int | source_id, | |
enum state_function * | state | |||
) | [static] |
Global State Machine:
Definition at line 157 of file main.c.
References GUI_OUTPUT1_ID, GUI_OUTPUT2_ID, GUI_OUTPUT3_ID, gui_set_selection(), GUI_SOURCE1_ID, new_state_fct, STATE_FCT_FUNCTION1, STATE_FCT_FUNCTION2, STATE_FCT_FUNCTION3, STATE_FCT_FUNCTION4, STATE_FCT_IDLE, STATE_FCT_ZOOM, zoom_view, and zoom_view_id.
Referenced by state_machine_task().
00158 { 00159 00160 switch (*state) 00161 { 00162 case STATE_FCT_IDLE: 00163 if (source_id == GUI_SOURCE1_ID) 00164 { 00165 if (new_state_fct) 00166 { 00167 gui_set_selection(GUI_SOURCE1_ID); 00168 } 00169 } 00170 else if (source_id == GUI_OUTPUT1_ID) 00171 { 00172 if (new_state_fct) 00173 { 00174 gui_set_selection(GUI_OUTPUT1_ID); 00175 } 00176 } 00177 else if (source_id == GUI_OUTPUT2_ID) 00178 { 00179 if (new_state_fct) 00180 { 00181 gui_set_selection(GUI_OUTPUT2_ID); 00182 } 00183 } 00184 else if (source_id == GUI_OUTPUT3_ID) 00185 { 00186 if (new_state_fct) 00187 { 00188 gui_set_selection(GUI_OUTPUT3_ID); 00189 } 00190 } 00191 break; 00192 // Not Implemented 00193 case STATE_FCT_FUNCTION1: 00194 break; 00195 // Not Implemented 00196 case STATE_FCT_FUNCTION2: 00197 break; 00198 // Not Implemented 00199 case STATE_FCT_FUNCTION3: 00200 break; 00201 // Not Implemented 00202 case STATE_FCT_FUNCTION4: 00203 break; 00204 // Zoom 00205 case STATE_FCT_ZOOM: 00206 if (new_state_fct) 00207 { 00208 zoom_view = TRUE; 00209 if (source_id == GUI_SOURCE1_ID) 00210 zoom_view_id = GUI_SOURCE1_ID; 00211 else if (source_id == GUI_OUTPUT1_ID) 00212 zoom_view_id = GUI_OUTPUT1_ID; 00213 else if (source_id == GUI_OUTPUT2_ID) 00214 zoom_view_id = GUI_OUTPUT2_ID; 00215 else if (source_id == GUI_OUTPUT3_ID) 00216 zoom_view_id = GUI_OUTPUT3_ID; 00217 } 00218 break; 00219 } 00220 return TRUE; 00221 }
static void state_machine_task | ( | void | ) | [static] |
Navigation State Machine:
Definition at line 227 of file main.c.
References controller_key_fct1(), controller_key_fct2(), controller_key_fct3(), controller_key_fct4(), controller_key_fct5(), gui_clear_view(), GUI_OUTPUT1_ID, GUI_OUTPUT2_ID, GUI_OUTPUT3_ID, GUI_SOURCE1_ID, new_state_fct, state, state_fct, STATE_FCT_IDLE, STATE_FCT_ZOOM, STATE_IDLE, state_machine_global(), STATE_OUTPUT1, STATE_OUTPUT2, STATE_OUTPUT3, STATE_SOURCE1, and zoom_view.
Referenced by main().
00228 { 00229 #ifdef BUTTON_CONTROL 00230 // Set function state 00231 if (gpio_get_pin_value(GPIO_PUSH_BUTTON_0)==GPIO_PUSH_BUTTON_0_PRESSED) 00232 { 00233 state_fct = STATE_FCT_ZOOM; 00234 new_state_fct = TRUE; 00235 } 00236 else 00237 { 00238 state_fct = STATE_FCT_IDLE; 00239 state = STATE_SOURCE1; 00240 new_state_fct = TRUE; 00241 } 00242 // Clear Zoom state if on and a key is pressed 00243 if (zoom_view && (gpio_get_pin_value(GPIO_PUSH_BUTTON_0)!=GPIO_PUSH_BUTTON_0_PRESSED)) 00244 { 00245 zoom_view = FALSE; 00246 gui_clear_view(); 00247 new_state_fct = TRUE; 00248 state_fct = STATE_FCT_IDLE; 00249 } 00250 #else 00251 // Set function state 00252 if (controller_key_fct5()) 00253 { 00254 state_fct = STATE_FCT_ZOOM; 00255 new_state_fct = TRUE; 00256 new_state_fct = TRUE; 00257 } 00258 else if (controller_key_fct1()) 00259 { 00260 state_fct = STATE_FCT_IDLE; 00261 state = STATE_SOURCE1; 00262 new_state_fct = TRUE; 00263 } 00264 else if (controller_key_fct2()) 00265 { 00266 state_fct = STATE_FCT_IDLE; 00267 state = STATE_OUTPUT1; 00268 new_state_fct = TRUE; 00269 } 00270 else if (controller_key_fct3()) 00271 { 00272 state_fct = STATE_FCT_IDLE; 00273 state = STATE_OUTPUT2; 00274 new_state_fct = TRUE; 00275 } 00276 else if (controller_key_fct4()) 00277 { 00278 state_fct = STATE_FCT_IDLE; 00279 state = STATE_OUTPUT3; 00280 new_state_fct = TRUE; 00281 } 00282 // Clear Zoom state if on and a key is pressed 00283 if (zoom_view && !controller_key_fct5()) 00284 { 00285 zoom_view = FALSE; 00286 gui_clear_view(); 00287 new_state_fct = TRUE; 00288 state_fct = STATE_FCT_IDLE; 00289 } 00290 #endif 00291 00292 switch (state) 00293 { 00294 case STATE_IDLE: 00295 break; 00296 case STATE_SOURCE1: 00297 if (!state_machine_global(GUI_SOURCE1_ID, &state_fct)) 00298 return; 00299 break; 00300 case STATE_OUTPUT1: 00301 if (!state_machine_global(GUI_OUTPUT1_ID, &state_fct)) 00302 return; 00303 break; 00304 case STATE_OUTPUT2: 00305 if (!state_machine_global(GUI_OUTPUT2_ID, &state_fct)) 00306 return; 00307 break; 00308 case STATE_OUTPUT3: 00309 if (!state_machine_global(GUI_OUTPUT3_ID, &state_fct)) 00310 return; 00311 break; 00312 00313 } 00314 new_state_fct = FALSE; 00315 }
static void twi_init | ( | void | ) | [static] |
TWI Initialisation for QTouch Controller.
Definition at line 428 of file main.c.
References AT42QT1060_TWI, AT42QT1060_TWI_ADDRESS, AT42QT1060_TWI_MASTER_SPEED, AT42QT1060_TWI_SCL_FUNCTION, AT42QT1060_TWI_SCL_PIN, AT42QT1060_TWI_SDA_FUNCTION, AT42QT1060_TWI_SDA_PIN, and FPBA_HZ.
Referenced by main().
00429 { 00430 const gpio_map_t AT42QT1060_TWI_GPIO_MAP = 00431 { 00432 {AT42QT1060_TWI_SCL_PIN, AT42QT1060_TWI_SCL_FUNCTION}, 00433 {AT42QT1060_TWI_SDA_PIN, AT42QT1060_TWI_SDA_FUNCTION} 00434 }; 00435 00436 const twi_options_t AT42QT1060_TWI_OPTIONS = 00437 { 00438 .pba_hz = FPBA_HZ, 00439 .speed = AT42QT1060_TWI_MASTER_SPEED, 00440 .chip = AT42QT1060_TWI_ADDRESS, 00441 .smbus = FALSE, 00442 }; 00443 00444 // Assign I/Os to TWI. 00445 gpio_enable_module(AT42QT1060_TWI_GPIO_MAP, 00446 sizeof(AT42QT1060_TWI_GPIO_MAP) / sizeof(AT42QT1060_TWI_GPIO_MAP[0])); 00447 // Initialize as master. 00448 twi_master_init(AT42QT1060_TWI, &AT42QT1060_TWI_OPTIONS); 00449 }
volatile U16 adc_current_conversion |
Definition at line 117 of file main.c.
Referenced by adc_process_task(), and can_example_prepare_data_to_send().
S16 adc_values_seq0[NUMBER_OF_INPUTS_ADC_SEQ0] |
S16 adc_values_seq1[NUMBER_OF_INPUTS_ADC_SEQ1] |
volatile avr32_adcifa_t* adcifa = &AVR32_ADCIFA |
adcifa_opt_t adcifa_opt |
Initial value:
{ .frequency = 1000000, .reference_source = ADCIFA_ADCREF0, .sample_and_hold_disable = FALSE, .single_sequencer_mode = FALSE, .free_running_mode_enable = FALSE, .sleep_mode_enable = FALSE }
Definition at line 318 of file main.c.
Referenced by adc_process_init().
adcifa_sequencer_conversion_opt_t adcifa_sequence_conversion_opt_seq0[NUMBER_OF_INPUTS_ADC_SEQ0] |
Initial value:
{ { INPUT1_ADC_INP, INPUT1_ADC_INN, ADCIFA_SHG_1 } }
Definition at line 339 of file main.c.
Referenced by adc_process_init().
adcifa_sequencer_conversion_opt_t adcifa_sequence_conversion_opt_seq1[NUMBER_OF_INPUTS_ADC_SEQ1] |
Initial value:
{ { INPUT2_ADC_INP, INPUT2_ADC_INN, ADCIFA_SHG_8 } }
Definition at line 349 of file main.c.
Referenced by adc_process_init().
adcifa_sequencer_opt_t adcifa_sequence_opt |
Initial value:
{ NUMBER_OF_INPUTS_ADC_SEQ0, ADCIFA_SRES_12B, ADCIFA_TRGSEL_SOFT, ADCIFA_SOCB_ALLSEQ, ADCIFA_CSWS_WSTATE, ADCIFA_HWLA_NOADJ, ADCIFA_SA_NO_EOS_SOFTACK }
Definition at line 328 of file main.c.
Referenced by adc_process_init(), and adc_process_task().
volatile Bool input_fft_view = FALSE |
Bool new_state_fct = FALSE [static] |
Definition at line 151 of file main.c.
Referenced by state_machine_global(), and state_machine_task().
volatile Bool output_fft_view = FALSE |
A_ALIGNED dsp16_t signal1_buf[BUFFER_LENGTH] |
A_ALIGNED dsp16_t signal4_buf[BUFFER_LENGTH] |
enum state_master state = STATE_IDLE [static] |
enum state_function state_fct = STATE_FCT_IDLE [static] |
volatile Bool zoom_view = FALSE |
Definition at line 127 of file main.c.
Referenced by gui_print_signal_box(), state_machine_global(), and state_machine_task().
volatile int zoom_view_id |
Definition at line 128 of file main.c.
Referenced by gui_print_signal_box(), and state_machine_global().