📄 net.c
字号:
}
while((read_reg(0x00, C0_ISR) & 0x40) != 0x40 )
WDR();
//state_3100a=0x00;
//delayus(100);
//DISABLE_XM( );
}
//---------------------------------------------------------
// NAME: W3100A_int()
// ENTRY: void
// RETURN: void
// FUNCTION:init the chip W3100A
// MODIFY: 2004.2.3
//---------------------------------------------------------
void W3100A_int(void)
{
unsigned char k=0;
ini_indirect_mood(MODE1); //set_indirect
W3100A_write_reg(0x00,C0_CR,0x80); //reset
W3100A_write_reg(0x00,IMR,0x88); //set C0 intterupt enable
W3100A_write_reg(0x00,C0_SOPR,0x01); //select scoket_TCP
W3100A_write_reg(0x00,TMSR,0x55); //set send buffer 1K
k=read_reg(0x00,TMSR);
W3100A_write_reg(0x00,RMSR,0x55); //set receive buffer
W3100A_write_reg(0x00,C0_MSSR,0x80); //set Mem_seg
W3100A_write_reg(0x00,C0_MSSR+1,0x00);
W3100A_write_reg(0x00,IRTR,0x01); //retry_time
W3100A_write_reg(0x00,IRTR+1,0x90);
W3100A_write_reg(0x00,RCR,0xff);
for(k=0;k<2;k++)
{
W3100A_write_reg(0x00,C0_DPR+k,C0DPR[k]); //set destination_socket
W3100A_write_reg(0x00,C0_SPR+k,C0SPR[k]); //set source_socket
}
W3100A_write_reg(0x00,C0_CR,0x01); //ini_system
have_get2[0]=0x00;
have_get2[1]=0x00;
have_get2[2]=0x40;
have_get2[3]=0x01;
//N=1;
W3100A_M=1;
//address=0x4001;
}
//---------------------------------------------------------
// NAME: W3100A_GATE()
// ENTRY: *P
// RETURN: void
// FUNCTION:init the gateway
// MODIFY: 2004.2.3
//---------------------------------------------------------
void W3100A_GATE(unsigned char *P)
{
unsigned char tt;
tt=0;
//W3100A_write_reg(0x00,GAR+1,0x33);
W3100A_write_reg(0x00,GAR+0,P[0]);
W3100A_write_reg(0x00,GAR+1,P[1]);
//tt=read_reg(0x00,GAR+0);
//tt=read_reg(0x00,GAR+1);
W3100A_write_reg(0x00,GAR+2,P[2]);
//tt=read_reg(0x00,GAR+2);
W3100A_write_reg(0x00,GAR+3,P[3]);
//tt=read_reg(0x00,GAR+3);
}
//---------------------------------------------------------
// NAME: W3100A_SUBNET()
// ENTRY: *P
// RETURN: void
// FUNCTION:init the subnet
// MODIFY: 2004.2.3
//---------------------------------------------------------
void W3100A_SUBNET(unsigned char *P)
{
unsigned char tt;
tt=0;
W3100A_write_reg(0x00,SMR+0,P[0]);
//W3100A_write_reg(0x00,SMR+0,0x43);
//tt=read_reg(0x00,SMR+0);
W3100A_write_reg(0x00,SMR+1,P[1]);
W3100A_write_reg(0x00,SMR+2,P[2]);
W3100A_write_reg(0x00,SMR+3,P[3]);
}
//---------------------------------------------------------
// NAME: W3100A_LOCAL_IP()
// ENTRY: *P
// RETURN: void
// FUNCTION:init the local ip
// MODIFY: 2004.2.3
//---------------------------------------------------------
void W3100A_LOCAL_IP(unsigned char *P)
{
W3100A_write_reg(0x00,SIPR+0,P[0]);
W3100A_write_reg(0x00,SIPR+1,P[1]);
W3100A_write_reg(0x00,SIPR+2,P[2]);
W3100A_write_reg(0x00,SIPR+3,P[3]);
}
//---------------------------------------------------------
// NAME: W3100A_DES_IP()
// ENTRY: *P
// RETURN: void
// FUNCTION:init the destnation ip
// MODIFY: 2004.2.3
//---------------------------------------------------------
void W3100A_DES_IP(unsigned char *P)
{
W3100A_write_reg(0x00,C0_DIR+0,P[0]);
W3100A_write_reg(0x00,C0_DIR+1,P[1]);
W3100A_write_reg(0x00,C0_DIR+2,P[2]);
W3100A_write_reg(0x00,C0_DIR+3,P[3]);
}
//---------------------------------------------------------
// NAME: W3100A_handware_IP()
// ENTRY: *P
// RETURN: void
// FUNCTION:init the handware IP
// MODIFY: 2004.2.3
//---------------------------------------------------------
void W3100A_handware_IP(unsigned char *P)
{
W3100A_write_reg(0x00,SHAR+0,P[0]);
W3100A_write_reg(0x00,SHAR+1,P[1]);
W3100A_write_reg(0x00,SHAR+2,P[2]);
W3100A_write_reg(0x00,SHAR+3,P[3]);
W3100A_write_reg(0x00,SHAR+4,P[4]);
W3100A_write_reg(0x00,SHAR+5,P[5]);
}
//---------------------------------------------------------
// NAME: w3100a_open()
// ENTRY: void
// RETURN: void
// FUNCTION:init the w3100a,set it in listen status
// MODIFY: 2004.2.3
//---------------------------------------------------------
void w3100a_open(void)
{
unsigned char net[4],i,dat;
W3100A_int();
for(i=0;i<4;i++)
{
//memory_read_byte(ADDRESS_FOR_GATEWAY+i, &dat);
net[i]=dat;
}
//W3100A_GATE(net);
W3100A_GATE(net_gatway);
for(i=0;i<4;i++)
{
//memory_read_byte(ADDRESS_FOR_SUBNET+i, &dat);
net[i]=dat;
}
//W3100A_GATE(net);
W3100A_SUBNET(net_sub);W3100A_GATE(net_gatway);
for(i=0;i<4;i++)
{
//memory_read_byte(ADDRESS_FOR_LOCAL_IP+i, &dat);
net[i]=dat;
}
//W3100A_LOCAL_IP(net);
W3100A_LOCAL_IP(net_lip);
for(i=0;i<4;i++)
{
// memory_read_byte(ADDRESS_FOR_DES_IP+i, &dat);
net[i]=dat;
}
W3100A_DES_IP(net_dip);
// W3100A_DES_IP(net);
W3100A_handware_IP(w3100_shar);
//W3100A_int();
W3100A_socket_init();
}
//---------------------------------------------------------
// NAME: W3100A_connect()
// ENTRY: void
// RETURN: void
// FUNCTION:check the net connected or not
// MODIFY: 2004.2.3
//---------------------------------------------------------
unsigned int time_out=0;
void W3100A_connect(void)
{
unsigned char connect_state=0;
connect_state=read_reg(0x00,C0_SSR);
//send_connect_state(connect_state);
if(connect_state==0x06)
have_connect=1;
else
//else if((connect_state<6)&&(connect_state>0))
{
if(time_out<500)
time_out+=1;
else
have_connect=0;
}
//else
//have_connect=0;
}
//---------------------------------------------------------
// NAME: W3100A_close()
// ENTRY: void
// RETURN: void
// FUNCTION:close the net connected
// MODIFY: 2004.2.3
//---------------------------------------------------------
void W3100A_close(void)
{
if(read_reg(0x00,C0_SSR)==0x06)
{
W3100A_write_reg(0x00,C0_CR,0x10); //close_command
delayus(50000);
if(read_reg(0x00,C0_SSR)==0x00)
have_connect=0;
}
}
//---------------------------------------------------------
// NAME: net_receive_data_operation()
// ENTRY: void
// RETURN: void
// FUNCTION:读取接收数据并处理
// MODIFY: 2004.2.3
//---------------------------------------------------------
void net_receive_data_operation(void)
{
receive_size=0;
receive_size=W3100A_pre_receive(); //读取接收数据长度
if(receive_size) //收到数据信息
{
W3100A_data_receive(); //读取命令
//对接收的数据处理
}
}
//---------------------------------------------------------
// NAME: net_transmit_data_opertion()
// ENTRY: void
// RETURN: void
// FUNCTION:发送待发送数据
// MODIFY: 2004.2.3
//---------------------------------------------------------
void net_transmit_data_opertion(unsigned char len)
{
//W3100A_connect();
WDR();
if(have_connect==1)
{
//W3100A_connect();
TCP_IP_Write_Data(len,net_tx_buf);
}
}
//---------------------------------------------------------
// NAME: modify_net_config()
// ENTRY: void
// RETURN: void
// FUNCTION:重新初始化网络参数
// MODIFY: 2004.2.3
//---------------------------------------------------------
void modify_net_config(void)
{
ENABLE_XM( );
W3100A_GATE(net_gatway);
W3100A_SUBNET(net_sub);
W3100A_LOCAL_IP(net_lip);
W3100A_DES_IP(net_dip);
W3100A_handware_IP(w3100_shar);
W3100A_socket_init();
DISABLE_XM( );
}
//---------------------------------------------------------
// NAME: net_send_cmd()
// ENTRY: destination,len
// RETURN: void
// FUNCTION:根据目标信息像以太网发送数据
// MODIFY: 2004.2.3
//---------------------------------------------------------
void net_send_cmd( unsigned char destination,unsigned char len )
{
WDR();
if(destination==1)
{
net_send_data[0] = 0x47; // start code
net_send_data[1] = 0xaa;
net_send_data[2] = 2;
net_send_data[3] = 0;
net_send_data[4] = 0xfe;
net_client_transmit(5);
}
else
{
/*
for(i=0;i<len;i++)
{
net_send_data[i] = com_rx_buf[com_Rxout+i];
}
*/
net_client_transmit(len+1); //transmit the data form to the client
}
}
//---------------------------------------------------------
// NAME: set_3033()
// ENTRY: ch
// RETURN: void
// FUNCTION:根据数据信息设置邋qam(3033)
// MODIFY: 2004.2.3
//---------------------------------------------------------
void set_3033(unsigned char ch)
{
switch(ch)
{
case 1: //Q1
broad_3033_init(qam1,1);
break;
case 2: //Q2
broad_3033_init(qam1,2);
break;
case 3: //Q3
broad_3033_init(qam1,3);
break;
case 4: //Q4
broad_3033_init(qam1,4);
break;
case 5: //Q5
broad_3033_init(qam2,1);
break;
case 6: //Q6
broad_3033_init(qam2,2);
break;
case 7: //Q7
broad_3033_init(qam2,3);
break;
case 8: //Q8
broad_3033_init(qam2,4);
break;
default:
break;
}
}
//---------------------------------------------------------
// NAME: net_set_qam()
// ENTRY: void
// RETURN: void
// FUNCTION:根据数据信息分析设置qam
// MODIFY: 2004.2.3
//---------------------------------------------------------
void net_set_qam(void)
{
unsigned int temp1;
unsigned char k,temp;
unsigned char i,checksum;
unsigned char t1,t2;
t1=0;t2=0;k=0;
checksum=0;
for(i=2;i<8;i++)
{
t1=net_Rxout+i;
checksum = checksum+ net_rx_buf[t1];
}
checksum=~checksum+1;
t1=net_Rxout+8;
if( net_rx_buf[t1]==checksum )
{
net_send_cmd(1,5);
}
else
return;
k=net_Rxout+4;
switch(net_rx_buf[k])
{
case 3:
t1=net_Rxout+6;t2=net_Rxout+7;
temp1=net_rx_buf[t2]*256+net_rx_buf[t1];
t1=net_Rxout+5;
iSmbRatSaved[net_rx_buf[t1]-1]=temp1;
center_frequency=ucMenuIFSubPosition[net_rx_buf[t1]-1]; //IF
qammode=ucMenuQModSubPosition[net_rx_buf[t1]-1]; //QMOD
iSmbRat=temp1;
t1=net_Rxout+5; //Symblrate
set_3033(net_rx_buf[t1]);
break;
case 1:
temp=net_Rxout+6;
t1=net_Rxout+5;
ucMenuIFSubPosition[net_rx_buf[t1]-1]=net_rx_buf[temp];
center_frequency=net_rx_buf[temp];
qammode=ucMenuQModSubPosition[net_rx_buf[t1]-1];
iSmbRat=iSmbRatSaved[net_rx_buf[t1]-1];
t1=net_Rxout+5; //if
set_3033(net_rx_buf[t1]);
break;
case 2:
temp=net_Rxout+6;
t1=net_Rxout+5;
ucMenuQModSubPosition[net_rx_buf[t1]-1]=net_rx_buf[temp];
center_frequency=ucMenuIFSubPosition[net_rx_buf[t1]-1];
qammode=net_rx_buf[temp];
iSmbRat=iSmbRatSaved[net_rx_buf[t1]-1];
t1=net_Rxout+5; //qmode
set_3033(net_rx_buf[t1]);
break;
default:
break;
}
temp=ucMenuQModSubPosition[qam_ch_position]; //qam mode
write_eeprom(0x0011+qam_ch_position,temp);
temp=ucMenuIFSubPosition[qam_ch_position]; //ifrequency
write_eeprom(0x0021+qam_ch_position,temp);
temp=iSmbRatSaved[qam_ch_position]/100; //symble rate
write_eeprom(0x0031+qam_ch_position,temp);
temp=iSmbRatSaved[qam_ch_position]%100;
write_eeprom(0x0041+qam_ch_position,temp);
net_Rxout += 9;
net_Rxout &= DATA_LEN;
}
//---------------------------------------------------------
// NAME: net_set_temperature()
// ENTRY: void
// RETURN: void
// FUNCTION:根据数据信息分析设置温度
// MODIFY: 2004.2.3
//---------------------------------------------------------
void net_set_temperature(void)
{
unsigned char i,checksum;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -