void lclcmd(int ch) { if (ch == 'd') /* dump memory */ { putx(' '); if (gethex()) { unsigned char *p; p = (unsigned char *) (int) val; if (gethex()) { newline(); prtbuf(p,val); } } } #if DBGMSG else if (ch == 'D') /* dump dbg buffer */ { newline(); int empty = dbgemp; for (int i = 0; i < dbgcnt; i++) { P_DBGMSG p = &dbgdata[empty]; float t = (float) p->time / 1000; printf("%8.3f %8s %8x %12d\n", t, p->str, (unsigned int) p->val, (int) p->val); empty++; if (empty >= MAXDBGMSG) empty = 0; while (1) { if (pollBufChar() == 0) break; } } printf("z %d x %d\n", zLoc, xLoc); } else if (ch == 'E') /* clear debug buffer */ { clrDbgBuf(); } #endif #if ENCTEST else if (ch == 'e') { printf(" counts "); fflush(stdout); if (getnum()) { encInit(); encRunCount = val; encStart(true); } else { printf(" stop[y] "); fflush(stdout); ch = getx(); if (ch == 'y') { encStop(); } } } #endif else if (ch == 't') { putx(' '); if (getnum()) { newline(); int i; int j = 0; for (i = 0; i < val; i++) { LOAD(XLDZCTL, j); read1(XRDZCTL); int testVal = j & ((1 << (zCtl_size)) - 1); if (readval.i != testVal) { setSync(); printf("%4d z testVal %8x readVal %8x\n", i, (unsigned int) testVal, (unsigned int) readval.i); clrSync(); } LOAD(XLDXCTL, j); read1(XRDXCTL); testVal = j & ((1 << (xCtl_size)) - 1); if (readval.i != testVal) { setSync(); printf("%4d x testVal %8x readVal %8x\n", i, (unsigned int) testVal, (unsigned int) readval.i); clrSync(); } j += 1; while (pollBufChar() != 0) ; } } } else if (ch == 'q') { gpioInfo(GPIOA); usartInfo(USART1); usartInfo(USART2); usartInfo(USART6); putstr1("start remcmd\n"); } else if (ch == 'r') /* read memory */ { putx(' '); if (gethex()) { printf("%x",*(int16_t *) (int) val); } } else if (ch == 'w') /* write memory */ { putx(' '); if (gethex()) { int16_t *p; p = (int16_t *) (int) val; printf(" %x ",*p); if (gethex()) { *p = val; } } } else if (ch == 'a') /* set command address */ { putx(' '); if (getnum()) addr = val; } else if (ch == 'g') /* read spi data */ { putx(' '); if (getnum()) { addr = val; /* save address */ read1(addr); /* read from device */ printf("\nread addr %x val %8lx %10ld",addr,readval.i,readval.i); } } else if (ch == 'G') /* read spi repeatedly */ { putx(' '); if (getnum()) /* enter address */ { addr = val; /* save address */ putx(' '); if (getnum()) /* enter number of tries */ { newline(); int16_t i = (int16_t) val; while (1) { read1(addr); /* read from device */ if (chRdy()) /* if character available */ { ch = chRead(); break; } if ((i != 0) && (--i <= 0)) break; } printf("spiw0 %d spiw1 %d",spiw0,spiw1); } } } else if (ch == 's') /* send val to address a */ { printf(" addr "); fflush(stdout); if (getnum()) /* read address */ { addr = val; printf(" data "); fflush(stdout); if (getnum()) /* read data */ { printf("\nsending addr %x %10ld val %8lx",addr,val,val); LOAD(addr,val); } } } else if (ch == 'p') /* set print flag */ { putx(' '); if (getnum()) { print = val; } } else if (ch == 'r') /* reset */ { LOAD(XLDZCTL,0); LOAD(XLDXCTL,0); LOAD(XLDTCTL,0); LOAD(XLDDCTL,0); } else if (ch == 'x') /* move x rel */ { putx(' '); if (getnum()) { xMoveRel(val, XMOV); } } else if (ch == 'z') /* move z rel */ { putx(' '); if (getnum()) { zMoveRel(val, XMOV); } } else if (ch == 'u') /* send debug message */ { putx(' '); if (getnum()) { dbgmsg("test",val); } } }
int main(void) { unsigned int num_bytes ; WDTCTL = WDTPW + WDTHOLD ; Init_CLK() ; Init_PSPI() ; P9DIR |= IrDA_OUT; P9OUT &=~IrDA_OUT; MAIN_POWER_ON ; /* for(;;){ for(i=0;i<40;i++) { P9OUT |= IrDA_OUT; __delay_cycles(20000); P9OUT &=~IrDA_OUT; __delay_cycles(20000); } __delay_cycles(5000000); } */ /* for(;;){ for(j=0;j<40;j++){ for(i=0;i<50;i++) { P9OUT &=~IrDA_OUT; __delay_cycles(270); P9OUT |= IrDA_OUT; __delay_cycles(270); } __delay_cycles(20000); } __delay_cycles(5000000); } */ myNode.node.ip = IP4_ADDR(103,1,168,192) ; myNode.node.mask = IP4_ADDR(0,255,255,255) ; myNode.node.gate = IP4_ADDR(1,1,168,192) ; myNode.node.mac[0] = 0x00 ; myNode.node.mac[1] = 0x60 ; myNode.node.mac[2] = 0x97 ; myNode.node.mac[3] = 0x48 ; myNode.node.mac[4] = 0xF4 ; myNode.node.mac[5] = 0xAB ; encInit() ; nicSetMacAddress() ; encPhyWrite(0x14,0x0470) ; arptab_init() ; ENC_SLEEP() ;// TEST ENC_WAKEUP();// TEST while(1) { num_bytes = encPacketReceive(&rxdnetbuf); if(num_bytes > 0) { if(rxdnetbuf.etherframe.protocal==ARP_PACKET) // 收到一个AR请求包 { if(rxdnetbuf.arpframe.operation==0x0100) arp_answer() ; // ARP request,处理arp数据包 else if(rxdnetbuf.arpframe.operation==0x0200) arp_process() ; // ARP answer } else if( (rxdnetbuf.etherframe.protocal == IP_PACKET) // 收到一个IP包 && ((rxdnetbuf.ipframe.verandihl&0xf0) == 0x40) // IP V4 && (rxdnetbuf.ipframe.destip[0] == myNode.nodebytes.ipbytes[0]) && (rxdnetbuf.ipframe.destip[1] == myNode.nodebytes.ipbytes[1]) && (rxdnetbuf.ipframe.destip[2] == myNode.nodebytes.ipbytes[2]) && (rxdnetbuf.ipframe.destip[3] == myNode.nodebytes.ipbytes[3])) { arp_ip_mac() ; if(rxdnetbuf.ipframe.protocal == 1) // ICMP { if(rxdnetbuf.icmpframe.type == 8) // ECHO ping_answer() ; } else if(rxdnetbuf.ipframe.protocal == 17) // UDP { // net_udp_rcv() ; _NOP(); // Clear_UPD_Buf() ; } /* else if(rxdnetbuf.ipframe.protocal == 6) // TCP tcp_rcve(&rxdnetbuf) ; updatearptab() ; */ } } } }