Ejemplo n.º 1
0
/*************************************************************************************************
 *
 *         函数名称: 
 *
 *         函数功能: 
 *
 *         入口参数: 
 *
 *         出口参数: 无
 *
 *             说明:
 *
 *************************************************************************************************/
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();  
   
  
} 
Ejemplo n.º 2
0
/*****************************************************************************
**   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 ;
}
Ejemplo n.º 4
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 ;
}
Ejemplo n.º 5
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(); 
          
}