/************************************************************************************************* * * 函数名称: * * 函数功能: * * 入口参数: * * 出口参数: 无 * * 说明: * *************************************************************************************************/ void VFDStop(UINT16 rev_fwd) { UINT8 i; UINT8 buff[20]; UINT16 tmp_crc; Wait(400000); //2008-08-24 buff[0] = 0x01; buff[1] = 0x06; //写入单笔数据 buff[2] = 0x20; //地址 buff[3] = 0x00; buff[4] = 0x00; if (rev_fwd == FWD_STOP) { buff[5] = 0x11; } else if (rev_fwd == REV_STOP) { buff[5] = 0x21; } tmp_crc = CRCCheck(buff, 6); buff[6] = tmp_crc & 0xFF; //低位在先 buff[7] = tmp_crc >> 8; //ENA_RS485_OUT(); for (i = 0; i < 8; i++) { UARTSendByte(TRANSD_CHNNL, buff[i]); Wait(30); } //Wait(600000); //DIS_RS485_OUT(); }
/***************************************************************************** ** Main Function main() ******************************************************************************/ int main (void) { /* Setup SysTick Timer for 10 msec interrupts */ if (SysTick_Config(SystemCoreClock / 100)) { while (1); /* Capture error */ } if (!(SysTick->CTRL & SysTick_CTRL_CLKSOURCE_Msk)) { /* When external reference clock is used(CLKSOURCE in Systick Control and register bit 2 is set to 0), the SYSTICKCLKDIV must be a non-zero value and 2.5 times faster than the reference clock. When core clock, or system AHB clock, is used(CLKSOURCE in Systick Control and register bit 2 is set to 1), the SYSTICKCLKDIV has no effect to the SYSTICK frequency. See more on Systick clock and status register in Cortex-M3 technical Reference Manual. */ LPC_SYSCON->SYSTICKCLKDIV = 0x08; } GPIOInit(); init_timers(); // The LED on Xpresso /* Set port 0_7 to output */ GPIOSetDir( LED_PORT, LED_BIT, 1 ); GPIOSetValue( 0, 7, LEDvalue ); // buttons buttons_init(); power_mgr_init(); // check for 'next' button if (GPIOGetValue(0, 6)) { led_digits_init(); led_digits_enable(); //led_digits_set_blink(1); led_red_set(1); led_green_set(1); } else { GPIOSetValue( 0, 7, 1 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 0 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 1 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 0 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 1 ); delay32Ms(0,500); GPIOSetValue( 0, 7, 0 ); delay32Ms(0,500); } // BARCODE reader barcode_init(); barcode_reset(); // RFID reader rdm630_init(); rdm630_reset(); // UART UARTInit(115200); // Enable the UART Interrupt NVIC_EnableIRQ(UART_IRQn); LPC_UART->IER = IER_RBR | IER_RLS; logger_setEnabled(1); logger_logStringln("/O:entering main loop..."); // send online message (means i'm online) uint8_t counter = 0; for(counter = 0; counter < 100; counter++) { led_digits_set_value(counter); delay32Ms(0, 20); } for(counter = 0; counter < 10; counter++) { led_digits_set_value_by_chars('0' + counter, '0' + counter); delay32Ms(0, 200); } delay32Ms(0, 200); led_digits_enable(); signal_boot_up(); int8_t last_remaining_seconds = -1; while (1) { /* process logger */ if (logger_dataAvailable() && UARTTxEmpty) { uint8_t iCounter; // fill transmit FIFO with 14 bytes for (iCounter = 0; iCounter < 14 && logger_dataAvailable(); iCounter++) { UARTSendByte(logger_read()); } } power_mgr_process(msTicks); barcode_process(msTicks); rdm630_process(msTicks); buttons_process(msTicks); led_digits_process(msTicks); /* if (power_mgr_is_shutting_down()) { if (power_mgr_get_remaining_player_seconds() != last_remaining_seconds) { last_remaining_seconds = power_mgr_get_remaining_player_seconds(); led_digits_set_value(last_remaining_seconds); } if (last_remaining_seconds == 0) { led_green_set(0); led_red_set(1); led_digits_disable(); } continue; } */ main_process_barcode(); main_process_rfid(); main_process_buttons(); main_process_uart(); } }
// **************** 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 ; }
/************************************************************************************************* * * 函数名称: * * 函数功能: * * 入口参数: * * 出口参数: 无 * * 说明: * *************************************************************************************************/ void VFDRunB(UINT16 rev_fwd, UINT16 rev_num) { UINT8 i; UINT8 buff[20]; UINT16 tmp_crc; //DelayS(2); ///Wait(500000); Wait(500000); //ENA_RS485_OUT(); //写入频率 buff[0] = 0x01; buff[1] = 0x06; //写入单笔数据 buff[2] = 0x20; //地址 buff[3] = 1; rev_num *= 10; rev_num /= 3; buff[4] = rev_num >> 8; buff[5] = rev_num & 0xFF; tmp_crc = CRCCheck(buff, 6); buff[6] = tmp_crc & 0xFF; //低位在先 buff[7] = tmp_crc >> 8; //ENA_RS485_OUT(); for (i = 0; i < 8; i++) { UARTSendByte(TRANSD_CHNNL, buff[i]); Wait(30); } //Wait(600); //DIS_RS485_OUT(); Wait(500000); //2008-08-24 //Wait(600000); //ENA_RS485_OUT(); buff[0] = 0x01; buff[1] = 0x06; //写入单笔数据 buff[2] = 0x20; //地址 buff[3] = 0x00; buff[4] = 0; if (rev_fwd == FWD_RUN) { buff[5] = 0x12; } else if (rev_fwd == REV_RUN) { buff[5] = 0x22; } tmp_crc = CRCCheck(buff, 6); buff[6] = tmp_crc & 0xFF; //低位在先 buff[7] = tmp_crc >> 8; for (i = 0; i < 8; i++) { UARTSendByte(TRANSD_CHNNL, buff[i]); Wait(30); } //Wait(300000); //Wait(600000); //DIS_RS485_OUT(); }