int main(void) { Error check_error = success; uint8 narrow; uint8 wide; os_sleep(100); CheckCleanup(os_boot(boot_module_table, LENGTH(boot_module_table)), boot_failure); CheckCleanup(record_command(0, null), record_failure); record_failure: narrow = 2; wide = 1; goto failure; boot_failure: narrow = 1; wide = os_boot_index(); goto failure; failure: while (!uart_character_ready()) led_signal(narrow, wide); error_stack_print(); write(PSTR("\r\n\r\nWavelogger v4.0\r\n")); write(PSTR("Reset reason: 0x%hx\r\n"), os_reset_reason()); shell_run(shell_command_table, LENGTH(shell_command_table)); return 0; }
// **************** int main(void) { // Setup SysTick Timer to interrupt at 10 msec intervals if (SysTick_Config(SystemCoreClock / 100)) { while (1); // Capture error } led_init(); // Setup GPIO for LED2 led_on(0); // Turn LED2 on //led_on(0); //led_on(1); systick_delay(100); led_off(0); UARTInit(0, 115200); // baud rate setting UARTInit(2, 9600); // baud rate setting, PC UARTSendCRLF(0); UARTSendCRLF(0); UARTSendStringln(0, "UART2 online ..."); drs155m_init(); logger_setEnabled(1); logger_logStringln("logger online ..."); logger_logString("BUILD ID: "); logger_logStringln(VERSION_BUILD_ID); led_off(7); uint16_t loop_count = 0; uint8_t do_start = 0; #define METER_COUNT 4 uint8_t error_count[METER_COUNT] = {0,0,0}; uint8_t current_meter_index = 0; drs155m_t power_meters[METER_COUNT]; power_meters[0].meter_id = "001511420141"; power_meters[1].meter_id = "001511420142"; power_meters[2].meter_id = "001511420143"; power_meters[3].meter_id = "001511420149"; drs155m_t* current_power_meter = &power_meters[0]; uint32_t delay_value = 0; while(1) { /* process logger */ if (console_out_dataAvailable() && UARTTXReady(0)) { uint8_t iCounter; // fill transmit FIFO with 14 bytes for(iCounter = 0; iCounter < 14 && console_out_dataAvailable(); iCounter++) { UARTSendByte(0, console_out_read()); } } led_process(msTicks); s0_process(msTicks); drs155m_process(msTicks); uint32_t triggerValue = s0_triggered(0); if (triggerValue) { logger_logString("s0_0:"); logger_logNumberln(triggerValue); led_signal(1, 30, msTicks); if (do_start) { do_start = 0; } else { do_start = 1; } } if (drs155m_is_ready() && do_start && math_calc_diff(msTicks, delay_value) > 20) { loop_count++; current_meter_index++; if (current_meter_index >= METER_COUNT) { current_meter_index = 0; } current_power_meter = &power_meters[current_meter_index]; drs155m_request_data(current_power_meter); } if (drs155m_is_data_available()) { logger_logStringln("Meter data: "); logger_logNumberln(current_power_meter->voltage); logger_logNumberln(current_power_meter->ampere); logger_logNumberln(current_power_meter->frequency); logger_logNumberln(current_power_meter->active_power); logger_logNumberln(current_power_meter->reactive_power); logger_logNumberln(current_power_meter->total_energy); logger_logString("operation took "); logger_logNumber(drs155m_get_duration()); logger_logStringln(" ticks"); logger_logString("current loop: "); logger_logNumberln(loop_count); logger_logString("error count 0: "); logger_logNumberln(error_count[0]); logger_logString("error count 1: "); logger_logNumberln(error_count[1]); logger_logString("error count 2: "); logger_logNumberln(error_count[2]); logger_logString("error count 3: "); logger_logNumberln(error_count[3]); drs155m_reset(); delay_value = msTicks; } if (drs155m_is_error()) { logger_logStringln("error reading meter data"); error_count[current_meter_index]++; drs155m_reset(); delay_value = msTicks; } triggerValue = s0_triggered(1); if (triggerValue) { logger_logString("s0_1:"); logger_logNumberln(triggerValue); led_signal(2, 30, msTicks); } /* logger echo */ if ( UART0Count != 0 ) { led2_on(); LPC_UART0->IER = IER_THRE | IER_RLS; /* Disable RBR */ int i = 0; for(; i < UART0Count; i++) { logger_logByte(UART0Buffer[i]); } UART0Count = 0; LPC_UART0->IER = IER_THRE | IER_RLS | IER_RBR; /* Re-enable RBR */ led2_off(); } } return 0 ; }
// **************** int main(void) { // Setup SysTick Timer to interrupt at 10 msec intervals if (SysTick_Config(SystemCoreClock / 100)) { while (1); // Capture error } led_init(); // Setup GPIO for LED2 led2_on(); // Turn LED2 on //led_on(0); //led_on(1); systick_delay(100); led2_off(); systick_delay(100); led2_on(); UARTInit(0, 115200); /* baud rate setting */ UARTSendCRLF(0); UARTSendCRLF(0); UARTSendStringln(0, "UART2 online ..."); //EINT3_init(); // Enter an infinite loop, just incrementing a counter and toggling leds every second //led2_off(); //int ledstate; //EINT3_enable(); logger_logStringln("logger online ..."); while(1) { /* process logger */ if (logger_dataAvailable() && UARTTXReady(0)) { uint8_t data = logger_read(); UARTSendByte(0,data); } process_leds(msTicks); process_s0(msTicks); uint32_t triggerValue = s0_triggered(0); if (triggerValue) { logger_logString("s0_0:"); logger_logNumberln(triggerValue); led_signal(0, 30, msTicks); } triggerValue = s0_triggered(1); if (triggerValue) { logger_logString("s0_1:"); logger_logNumberln(triggerValue); led_signal(1, 30, msTicks); } /* if (!s0_active) { s0_newState = ~LPC_GPIO0->FIOPIN & (S0_INPUT0 | S0_INPUT1); if (s0_oldState != s0_newState) { s0_active = 1; s0_msticks = msTicks; } } if (s0_active && s0_msticks != msTicks) { s0_state = ~LPC_GPIO0->FIOPIN & (S0_INPUT0 | S0_INPUT1 ); logger_logNumberln(s0_state); if (s0_state == s0_newState) { // falling edge if ((s0_newState & S0_INPUT0) > 0) { led2_invert(); } // rising edge if ((s0_newState & S0_INPUT1) == 0) { led2_invert(); } } s0_oldState = s0_state; s0_active = 0; } */ } return 0 ; }