Ejemplo n.º 1
0
/*******************************************************************
 *  FUNCTION: CommandBegin
 *  AUTHOR 		= 	TRAMPAS STERN
 *  FILE 		=	command.c	
 *  DATE		=   1/25/2004  3:43:22 PM
 *
 *  PARAMETERS: 	
 *
 *  DESCRIPTION: Starts up the serial command line 
 *
 *  RETURNS: 
 *
 *
 *******************************************************************/
UINT CommandBegin()
{
	UBYTE data;
	CHAR buffer[MAX_STRING];
	UBYTE buffIndex;

	//first clear the screen and push command prompt
	CLEAR_SCREEN();
	printf_P(PSTR(CMD_PROMPT));

	//now spin reading command and waiting on CR
	CommandExit=0;
	buffIndex=0;
	buffer[0]=0; 
	while(!CommandExit)
	{
		if(uart_kbhit())
		{
			data=uart_getchar();
				
			//echo the data
			uart_putchar(data);
		

			//if the data is the CR we need to process buffer
			if (data==0x0D)
			{	
				uart_putchar(0x0A);
				if (strlen(buffer)>0)
					CommandParse(buffer);
				printf_P(PSTR("\n\r"));
				printf_P(PSTR(CMD_PROMPT));
				buffIndex=0;
				buffer[buffIndex]=0;
			} 
		


			if (data != 0x0A && data !=0x0D)
			{
				buffer[buffIndex++]=data;
				buffer[buffIndex]=0;
			}
			if (buffIndex>=(MAX_STRING-1))
			{
				printf("\n\rERROR: Command buffer overflow\n\r");
				buffIndex=0;
				buffer[0]=0;
				printf(CMD_PROMPT);
			}
		}
	}
	return 0;
}
Ejemplo n.º 2
0
Archivo: cmds.c Proyecto: sigsaly/mpavr
void cmd_adc_pwm(char *c_ln)
{
	int val, target;

	while(!uart_kbhit()){
		val = adc_read(1);

		// change 0 - 1023 to -255 to 255
		target = (int)(510.0*val/1023.0 - 255);
		printf("adc: %d, target pwm %d\n", val, target);
		set_pwm(target);
		_delay_ms(500);
	}
	set_pwm(0);	
}
Ejemplo n.º 3
0
int main(void)
{
    UINT8 data;

    BIT_SET(L_OUT_DDR,L_OUT_PIN); //L_OUT pin is output
    BIT_SET(K_OUT_DDR,K_OUT_PIN); //K_OUT pin is output

    K_OUT(1);
    L_OUT(1);


    uart1_init(10400);
    uart_init(115200); //Set up UART
    TimeInit();	 //set up time

    //set up printf
    fdevopen(uart_putchar, NULL);

    printf("Hello world\n");

    while (1)
    {
        if (uart1_kbhit())
        {
            data=uart1_getchar();
            printf("0x%02X ",data);
            //uart_putchar(data);
        }
        if (uart_kbhit())
        {
            data=uart_getchar();
            uart1_putchar(data);
        }
    }



}
Ejemplo n.º 4
0
/*******************************************************************
 *  FUNCTION: Flash_serial_program
 *  AUTHOR 		= 	TRAMPAS STERN
 *  FILE 		=	flash.c
 *  DATE		=   1/26/2003  5:17:39 PM
 *
 *  PARAMETERS: Destination address
 *
 *  DESCRIPTION: gets xmodem packet and programs to flash
 *
 *  RETURNS: 	0 - pass,
 *				1 - Flash write failed
 *				
 *
 *
 *******************************************************************/
UBYTE Flash_serial_program(UDWORD address)
{
    UWORD i;
    UBYTE data[XMODEM_PACKET_SIZE];
	UBYTE ret;
	UBYTE done;
	UBYTE packet;
	UBYTE buff_addr;
	UDWORD page;
	UDWORD bytes;

	packet=1;		//first packet is 1
    bytes=0;	 

	//make address correct
	buff_addr=MAKE8(address,0);
	page=address & FLASH_MAX_PAGES; 
	page=page<<1;
	//addr=addr | buff_addr;


	//read page into buffer
	//transfer main memory into buffer #1
	FLASH_CS(1);
	spi_write(0x53);
	spi_write(MAKE8(page,2));
	spi_write(MAKE8(page,1));
	spi_write(buff_addr);
	FLASH_CS(1);
	flash_wait();

	//send request to start transimission
	// we will retry 40 times for slow users
	i=0;
	done=0;
	do {
		Xmodem_start();
		ret=Xmodem_get_packet(data,packet);	  //Get a packet of information	
	}while(ret==XERROR_SOH && i++<300);
	   		
	while(!done)
	{				
		UBYTE i;
		//then we need to program the data into flash
		for(i=0; i<XMODEM_PACKET_SIZE; i++)
		{
			//write each byte to buffer
			FLASH_CS(0);
			spi_write(0x84);
			spi_write(0);
			spi_write(0);
			spi_write(buff_addr);
			spi_write(data[i]);
			FLASH_CS(1);
			flash_wait();

 
			buff_addr++;
			//if buffer full write buffer to page 
			// and read next buffer
			if (buff_addr==0x00)
			{
				//we need to write buffer to page
				FLASH_CS(0);
				spi_write(0x83);
				spi_write(MAKE8(page,2));
				spi_write(MAKE8(page,1));
				spi_write(buff_addr);
				FLASH_CS(1);
				delay_ms(20);
				flash_wait();


				//read next page into buffer
				page=page+0x00200;
				FLASH_CS(0);
				spi_write(0x53);
				spi_write(MAKE8(page,2));
				spi_write(MAKE8(page,1));
				spi_write(buff_addr);
				FLASH_CS(1);
				flash_wait();

			}
			bytes++;
		}	
		packet++;
		//send request for next packet 
		if (ret==NO_ERRORS)
		{
			Xmodem_send_next();
			ret=Xmodem_get_packet(data,packet);	  //Get a packet of information
		}else 
		{
		  Xmodem_goodbye();	
		  done=1;
		}
			

	};

	//we need to write buffer to page
	FLASH_CS(0);
	spi_write(0x83);
	spi_write(MAKE8(page,2));
	spi_write(MAKE8(page,1));
	spi_write(buff_addr);
	FLASH_CS(1);
	delay_ms(20);
	flash_wait();

	if (ret==NO_ERRORS || ret==RECV_EOT)
	{
		Xmodem_goodbye();	
		delay_ms(500);
		printf_P(PSTR("\n\rFlashed %lu Bytes\n\r"),bytes);
		printf_P(PSTR("Flash Program completed\n\r"));
		return NO_ERRORS;
	}
   	
	Xmodem_send_cancel();	//tell host to cancel
	delay_ms(1000); //wait for host to give up
	while(uart_kbhit())
		uart_getchar();
	printf_P(PSTR("Flash Program ERROR %X packet=%d\n\r"),ret,packet);
	//printf_P(PSTR("Packet expect %d, got %d comp %d\n\r",expected,Xpacket,Xpacket_comp);
	printf_P(PSTR("Press x to exit\n\r"));
	while( uart_getchar()!='x'); 
   	return ret;				//else lets return the xmodem error
}
void HanddleUART2(void)
{

	unsigned char c;
	int Tp;	
	
	TICK MeterConcurrentTime;
	
	MeterConcurrentTime = TickGet();
	if( ( TickGetDiff( MeterConcurrentTime, TotalMeterGetConnceted1 ) ) > TIMETOCHECKNWKTABLE)
	{
		CompareNWKTable();
		TotalMeterGetConnceted1 = TickGet();
	}
	
	if(MyCommandFlag.ACK != ACK_PENDING)
	{
		if(MyCommandFlag.DataSent == TRUE)
		{
			if(MyCommandFlag.ACK == ACK_NOTRECEIVED)
			{
				//xprintf("ACK not Received :(\n\r");
				
				MyAskForDeviceAddress(FALSE,PrvSendIeeeAddr);
			}
			else if(MyCommandFlag.ACK == ACK_RECEIVED)
			{
				//xprintf("ACK Received :)\n\r");
			}
			else
			{
				xprintf("This staage I am not Expected\n\t");
			}
			MyCommandFlag.DataSent = FALSE;
		}
		else
		{
			ACKTimeOut = TickGet();
		}
	}
	else
	{
		
		TICK currentTime;
	
		currentTime = TickGet();

		if( ( TickGetDiff( currentTime, ACKTimeOut ) ) > (ONE_SECOND) *5)
		{
			MyCommandFlag.ACK = ACK_NOTRECEIVED;
			ACKTimeOut = TickGet();
		}
	}

	if(uart_kbhit() != 0)
	{
		c = uart_get();
		//x2putc(c);
		Uart2Buffer[NumberofReceived] = c;
		if(Uart2Buffer[0] == 0x2B || Uart2Buffer[0] == 0x1B)
		{
			NumberofReceived++;
		}
		else
		{
			NumberofReceived = 0;
		}
		if(NumberofReceived >=2 && numberofdatareceived == 0)
		{
			HowManyData = c;
			numberofdatareceived = 1;
		}
		if(HowManyData !=0 && NumberofReceived == HowManyData+1)
		{
			//xprintf("\n\r Data Received \n\r");
			//for(Tp=0;Tp<=HowManyData;Tp++)
			//	xprintf("\n\r Data is: %d\n\r",Uart2Buffer[Tp]);
			//xprintf("\n\r How many data = %d",HowManyData);
			Uart2Datalen = HowManyData;
			NumberofReceived = 0;
			numberofdatareceived = 0;
			HowManyData = 0;
			while(uart_kbhit() != 0)
				c = uart_get();
			CheckDataAndSend();
		}
	}

}