/******************************************************************* * 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; }
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); }
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); } } }
/******************************************************************* * 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(); } } }