📄 ir.c
字号:
CRC[1] = PC_MACADDRESS[1];
CRC[2] = PC_MACADDRESS[2];
CRC[3] = PC_MACADDRESS[3];
CRC[4] = PC_MACADDRESS[4];
CRC[5] = PC_MACADDRESS[5];
//source address
CRC[6] = MACADDRESS[0];
CRC[7] = MACADDRESS[1];
CRC[8] = MACADDRESS[2];
CRC[9] = MACADDRESS[3];
CRC[10] = MACADDRESS[4];
CRC[11] = MACADDRESS[5];
//protocol
CRC[12] = 0x08;
CRC[13] = 0x00;
CRC[14] = 0x45;
CRC[15] = 0x00;
CRC[16] = (28+7+UDP_LENGTH)/256;
CRC[17] = (28+7+UDP_LENGTH)%256;
CRC[18] = 0xA8;
CRC[19] = 0x00;
CRC[20] = 0x00;
CRC[21] = 0x00;
CRC[22] = 0x80;
CRC[23] = 0x11;
CRC[24] = 0x00;
CRC[25] = 0x00;
CRC[26] = IPADDRESS[0];
CRC[27] = IPADDRESS[1];
CRC[28] = IPADDRESS[2];
CRC[29] = IPADDRESS[3];
CRC[30] = PC_IPADDRESS[0];
CRC[31] = PC_IPADDRESS[1];
CRC[32] = PC_IPADDRESS[2];
CRC[33] = PC_IPADDRESS[3];
CRC_SUM = 0;
for (i=14;i<34;i+=2)
{
CRC_SUM = CRC_SUM + CRC[i]*256 + CRC[i+1];
CRC_SUM = CRC_SUM%65536 + CRC_SUM/65536;
}
CRC_SUM = 0xFFFF-CRC_SUM;
CRC[24] = CRC_SUM/256;
CRC[25] = CRC_SUM%256;
}
void UDP(unsigned char command)
{
NIC_TPSTART = TPSTART;
NIC_XMIT_BUFFER[0] = CRC[0];
NIC_XMIT_BUFFER[1] = CRC[1];
NIC_XMIT_BUFFER[2] = CRC[2];
NIC_XMIT_BUFFER[3] = CRC[3];
NIC_XMIT_BUFFER[4] = CRC[4];
NIC_XMIT_BUFFER[5] = CRC[5];
NIC_XMIT_BUFFER[6] = CRC[6];
NIC_XMIT_BUFFER[7] = CRC[7];
NIC_XMIT_BUFFER[8] = CRC[8];
NIC_XMIT_BUFFER[9] = CRC[9];
NIC_XMIT_BUFFER[10] = CRC[10];
NIC_XMIT_BUFFER[11] = CRC[11];
NIC_XMIT_BUFFER[12] = CRC[12];
NIC_XMIT_BUFFER[13] = CRC[13];
NIC_XMIT_BUFFER[14] = CRC[14];
NIC_XMIT_BUFFER[15] = CRC[15];
NIC_XMIT_BUFFER[16] = CRC[16];
NIC_XMIT_BUFFER[17] = CRC[17];
NIC_XMIT_BUFFER[18] = CRC[18];
NIC_XMIT_BUFFER[19] = CRC[19];
NIC_XMIT_BUFFER[20] = CRC[20];
NIC_XMIT_BUFFER[21] = CRC[21];
NIC_XMIT_BUFFER[22] = CRC[22];
NIC_XMIT_BUFFER[23] = CRC[23];
NIC_XMIT_BUFFER[24] = CRC[24];
NIC_XMIT_BUFFER[25] = CRC[25];
NIC_XMIT_BUFFER[26] = CRC[26];
NIC_XMIT_BUFFER[27] = CRC[27];
NIC_XMIT_BUFFER[28] = CRC[28];
NIC_XMIT_BUFFER[29] = CRC[29];
NIC_XMIT_BUFFER[30] = CRC[30];
NIC_XMIT_BUFFER[31] = CRC[31];
NIC_XMIT_BUFFER[32] = CRC[32];
NIC_XMIT_BUFFER[33] = CRC[33];
NIC_XMIT_BUFFER[34] = UDP_PORT_H;
NIC_XMIT_BUFFER[35] = UDP_PORT_L;
NIC_XMIT_BUFFER[36] = UDP_PORT_H;
NIC_XMIT_BUFFER[37] = UDP_PORT_L;
NIC_XMIT_BUFFER[38] = (8+7+UDP_LENGTH)/256;
NIC_XMIT_BUFFER[39] = (8+7+UDP_LENGTH)%256;
NIC_XMIT_BUFFER[40] = 0x00;
NIC_XMIT_BUFFER[41] = 0x00;
NIC_XMIT_BUFFER[42] = 'S';
NIC_XMIT_BUFFER[43] = 'E';
NIC_XMIT_BUFFER[44] = 'N';
NIC_XMIT_BUFFER[45] = 'C';
NIC_XMIT_BUFFER[46] = 'I';
NIC_XMIT_BUFFER[47] = 'T';
NIC_XMIT_BUFFER[48] = 'Y';
NIC_XMIT_BUFFER[49] = command;
NIC_XMIT_BUFFER[50] = ALARM_BUFFER[0];
NIC_XMIT_BUFFER[51] = ALARM_BUFFER[1];
NIC_XMIT_BUFFER[52] = ALARM_BUFFER[2]|__warmed;
NIC_XMIT_BUFFER[53] = ALARM_BUFFER[3];
NIC_XMIT_BUFFER[54] = (METER0.AMOUNT >> 16) & 0xFF;
NIC_XMIT_BUFFER[55] = (METER0.AMOUNT >> 8) & 0xFF;
NIC_XMIT_BUFFER[56] = (METER0.AMOUNT ) & 0xFF;
NIC_XMIT_BUFFER[57] = (METER1.AMOUNT >> 16) & 0xFF;
NIC_XMIT_BUFFER[58] = (METER1.AMOUNT >> 8) & 0xFF;
NIC_XMIT_BUFFER[59] = (METER1.AMOUNT ) & 0xFF;
NIC_XMIT_BUFFER[60] = (METER2.AMOUNT >> 16) & 0xFF;
NIC_XMIT_BUFFER[61] = (METER2.AMOUNT >> 8) & 0xFF;
NIC_XMIT_BUFFER[62] = (METER2.AMOUNT ) & 0xFF;
NIC_XMIT_BUFFER[63] = (METER3.AMOUNT >> 16) & 0xFF;
NIC_XMIT_BUFFER[64] = (METER3.AMOUNT >> 8) & 0xFF;
NIC_XMIT_BUFFER[65] = (METER3.AMOUNT ) & 0xFF;
NIC_XMIT_BUFFER[66] = (METER4.AMOUNT >> 16) & 0xFF;
NIC_XMIT_BUFFER[67] = (METER4.AMOUNT >> 8) & 0xFF;
NIC_XMIT_BUFFER[68] = (METER4.AMOUNT ) & 0xFF;
NIC_XMIT_BUFFER[69] = (METER5.AMOUNT >> 16) & 0xFF;
NIC_XMIT_BUFFER[70] = (METER5.AMOUNT >> 8) & 0xFF;
NIC_XMIT_BUFFER[71] = (METER5.AMOUNT ) & 0xFF;
NIC_XMIT_BUFFER[72] = 0;
NIC_XMIT_BUFFER[73] = 0;
NIC_XMIT_BUFFER[74] = 0;
NIC_XMIT_BUFFER[75] = 0;
NIC_XMIT_BUFFER[76] = 0;
NIC_XMIT_BUFFER[77] = 0;
NIC_XMIT_BUFFER[78] = TIME[0];
NIC_XMIT_BUFFER[79] = TIME[1];
NIC_XMIT_BUFFER[80] = TIME[2];
NIC_XMIT_BUFFER[81] = TIME[3];
NIC_XMIT_BUFFER[82] = TIME[4];
NIC_XMIT_BUFFER[83] = TIME[5];
NIC_XMIT_BUFFER[84] = TIME[6];
NIC_XMIT_BUFFER[85] = CONTROL[0];
NIC_XMIT_BUFFER[86] = CONTROL[1];
NIC_XMIT_BUFFER[87] = CONTROL[2];
NIC_XMIT_BUFFER[88] = CONTROL[3];
NIC_XMIT_BUFFER[89] = METER0.PULSE;
NIC_XMIT_BUFFER[90] = METER0.WIDTH;
NIC_XMIT_BUFFER[91] = METER1.PULSE;
NIC_XMIT_BUFFER[92] = METER1.WIDTH;
NIC_XMIT_BUFFER[93] = METER2.PULSE;
NIC_XMIT_BUFFER[94] = METER2.WIDTH;
NIC_XMIT_BUFFER[95] = METER3.PULSE;
NIC_XMIT_BUFFER[96] = METER3.WIDTH;
NIC_XMIT_BUFFER[97] = METER4.PULSE;
NIC_XMIT_BUFFER[98] = METER4.WIDTH;
NIC_XMIT_BUFFER[99] = METER5.PULSE;
NIC_XMIT_BUFFER[100] = METER5.WIDTH;
NIC_XMIT_BUFFER[101] = 0;
NIC_XMIT_BUFFER[102] = 0;
NIC_XMIT_BUFFER[103] = 0;
NIC_XMIT_BUFFER[104] = 0;
NIC_XMIT_BUFFER[105] = __wmeterquantity;
NIC_XMIT_BUFFER[106] = METER0.TYPE;
NIC_XMIT_BUFFER[107] = METER1.TYPE;
NIC_XMIT_BUFFER[108] = METER2.TYPE;
NIC_XMIT_BUFFER[109] = METER3.TYPE;
NIC_XMIT_BUFFER[110] = METER4.TYPE;
NIC_XMIT_BUFFER[111] = METER5.TYPE;
NIC_XMIT_BUFFER[112] = 0;
NIC_XMIT_BUFFER[113] = 0;
NIC_XMIT_BUFFER[114] = MACADDRESS[0];
NIC_XMIT_BUFFER[115] = MACADDRESS[1];
NIC_XMIT_BUFFER[116] = MACADDRESS[2];
NIC_XMIT_BUFFER[117] = MACADDRESS[3];
NIC_XMIT_BUFFER[118] = MACADDRESS[4];
NIC_XMIT_BUFFER[119] = MACADDRESS[5];
NIC_XMIT_BUFFER[120] = IPADDRESS[0];
NIC_XMIT_BUFFER[121] = IPADDRESS[1];
NIC_XMIT_BUFFER[122] = IPADDRESS[2];
NIC_XMIT_BUFFER[123] = IPADDRESS[3];
/*for (i=49;i++;i<UDP_LENGTH)
{
NIC_XMIT_BUFFER[i] = 0x00;
}*/
NIC_TBCNT0 = 0x00;
NIC_TBCNT1 = 0x05;
NIC_CR = CR_Start|CR_Xmit;
//CHECK_XMIT();
}
void ARPREQ()
{
//ARPREQ();
NIC_TPSTART = TPSTART;
//destination address
NIC_XMIT_BUFFER[0] = 0xFF;
NIC_XMIT_BUFFER[1] = 0xFF;
NIC_XMIT_BUFFER[2] = 0xFF;
NIC_XMIT_BUFFER[3] = 0xFF;
NIC_XMIT_BUFFER[4] = 0xFF;
NIC_XMIT_BUFFER[5] = 0xFF;
//source address
NIC_XMIT_BUFFER[6] = MACADDRESS[0];
NIC_XMIT_BUFFER[7] = MACADDRESS[1];
NIC_XMIT_BUFFER[8] = MACADDRESS[2];
NIC_XMIT_BUFFER[9] = MACADDRESS[3];
NIC_XMIT_BUFFER[10] = MACADDRESS[4];
NIC_XMIT_BUFFER[11] = MACADDRESS[5];
//port
NIC_XMIT_BUFFER[12] = 0x08;
NIC_XMIT_BUFFER[13] = 0x06;
NIC_XMIT_BUFFER[14] = 0x00;
NIC_XMIT_BUFFER[15] = 0x01;
NIC_XMIT_BUFFER[16] = 0x08;
NIC_XMIT_BUFFER[17] = 0x00;
NIC_XMIT_BUFFER[18] = 0x06;
NIC_XMIT_BUFFER[19] = 0x04;
NIC_XMIT_BUFFER[20] = 0x00;
NIC_XMIT_BUFFER[21] = 0x01;
//source MAC address
NIC_XMIT_BUFFER[22] = MACADDRESS[0];
NIC_XMIT_BUFFER[23] = MACADDRESS[1];
NIC_XMIT_BUFFER[24] = MACADDRESS[2];
NIC_XMIT_BUFFER[25] = MACADDRESS[3];
NIC_XMIT_BUFFER[26] = MACADDRESS[4];
NIC_XMIT_BUFFER[27] = MACADDRESS[5];
//source IP address
NIC_XMIT_BUFFER[28] = IPADDRESS[0];
NIC_XMIT_BUFFER[29] = IPADDRESS[1];
NIC_XMIT_BUFFER[30] = IPADDRESS[2];
NIC_XMIT_BUFFER[31] = IPADDRESS[3];
//destination MAC and IP address
NIC_XMIT_BUFFER[32] = 0;
NIC_XMIT_BUFFER[33] = 0;
NIC_XMIT_BUFFER[34] = 0;
NIC_XMIT_BUFFER[35] = 0;
NIC_XMIT_BUFFER[36] = 0;
NIC_XMIT_BUFFER[37] = 0;
NIC_XMIT_BUFFER[38] = IPADDRESS[0];
NIC_XMIT_BUFFER[39] = IPADDRESS[1];
NIC_XMIT_BUFFER[40] = IPADDRESS[2];
NIC_XMIT_BUFFER[41] = IPADDRESS[3];
//start xmit
NIC_TBCNT0 = 0x00;
NIC_TBCNT1 = 0x05;
NIC_CR = CR_Start|CR_Xmit;
}
void Init_NIC()
{
PHYCTRL = 0x01;//T10 enable and internal 10M phy enable
NIC_CR = CR_Stop;
NIC_IMR = 0x00;
NIC_ISR = 0xFF;
NIC_CR = CR_Stop|CR_Page1; //change to page1
NIC_PAR0 = MACADDRESS[0];
NIC_PAR1 = MACADDRESS[1];
NIC_PAR2 = MACADDRESS[2];
NIC_PAR3 = MACADDRESS[3];
NIC_PAR4 = MACADDRESS[4];
NIC_PAR5 = MACADDRESS[5];
NIC_MAR0 = 0xFF;
NIC_MAR1 = 0xFF;
NIC_MAR2 = 0xFF;
NIC_MAR3 = 0xFF;
NIC_MAR4 = 0xFF;
NIC_MAR5 = 0xFF;
NIC_MAR6 = 0xFF;
NIC_MAR7 = 0xFF;
NIC_CR1 = CR_Stop|CR_Page0;//return to page 0
NIC_RCR = RCR_AB|RCR_AP;
//NIC_RCR = RCR_AB;
NIC_RPSTART = RPSTART;
NIC_RPSTOP = RPSTOP;
NIC_BNRY = RPSTART;
NIC_CR = CR_Stop|CR_Page1; //change to page1
NIC_CURR = RPSTART + 1;
NIC_CR1 = CR_Stop|CR_Page0;//return to page 0
NextPacket = RPSTART + 1;
//NIC_IMR = IMR_RcvOKEn|IMR_XmtOkEn|IMR_RcvErrorEn|IMR_XmtErrorEn|IMR_RcvBufOverFlowEn;
NIC_IMR = IMR_RcvOKEn|IMR_RcvBufOverFlowEn;
NIC_CR = CR_Start;
}
/**********************ethernet end**********************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -