OpenCores
URL https://opencores.org/ocsvn/turbo8051/turbo8051/trunk

Subversion Repositories turbo8051

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 60 to Rev 61
    Reverse comparison

Rev 60 → Rev 61

/turbo8051/trunk/rtl/gmac/mac/g_rx_fsm.v
621,7 → 621,7
else if(cf2rx_rcv_runt_pkt_en && first_dword)
begin
rx_fsm_nxt_st = rx_fsm_chkval_st;
case(rcv_byte_count[2:0]) //synopsys full_case parallel_case
case(rcv_byte_count[2:0])
3'd1:
begin
if(shift_counter == 3'd4)
/turbo8051/trunk/rtl/gmac/mac/g_cfg_mgmt.v
421,7 → 421,7
 
generic_register #(8,0 ) u_mac_cntrl_reg_3 (
.we ({8{sw_wr_en_0 & wr_be[2] }}),
.data_in (reg_wdata[7:0] ),
.data_in (reg_wdata[23:16] ),
.reset_n (app_reset_n ),
.clk (app_clk ),
/turbo8051/trunk/rtl/gmac/ctrl/eth_parser.v
136,7 → 136,7
reg pkt_drop_ind ;
 
 
always @(s_reset_n or posedge app_clk) begin
always @(negedge s_reset_n or posedge app_clk) begin
if(s_reset_n == 1'b0) begin
bcnt <= 0;
pkt_len <= 0;
173,7 → 173,7
reg ip_da_match ; // ip4 da matches to local IP Address
reg[15:0] pkt_status ; // Packet Status
 
always @(s_reset_n or posedge app_clk) begin
always @(negedge s_reset_n or posedge app_clk) begin
if(s_reset_n == 1'b0) begin
mac_da_bc <= 0;
mac_da_mc <= 0;
287,6 → 287,10
mac_sa_mc <= 0;
mac_da_bc <= 0;
mac_da_mc <= 0;
tcpf <= 0;
udpf <= 0;
arpf <= 0;
ipv4f <= 0;
end
end
end
/turbo8051/trunk/rtl/core/core.v
4,6 → 4,7
// synopsys translate_on
 
 
`include "oc8051_defines.v"
module turbo8051 (
 
reset_n ,
278,6 → 279,9
wire rx_qcnt_inc = (cfg_rx_buf_qbase_addr == wb_xram_adr[15:6]) & wb_xram_stb & wb_xram_wr & wb_xram_ack && (wb_xram_be[3] == 1'b1);
wire rx_qcnt_dec = (cfg_rx_buf_qbase_addr == wb_xram_adr[15:6]) & wb_xram_stb & !wb_xram_wr & wb_xram_ack && (wb_xram_be[3] == 1'b1);
 
assign reg_mac_addr[1:0] = 2'b0;
assign reg_uart_addr[1:0] = 2'b0;
assign reg_spi_addr[1:0] = 2'b0;
//-------------------------------------------
// clock-gen instantiation
//-------------------------------------------
650,8 → 654,6
 
 
 
`include "oc8051_defines.v"
 
oc8051_top u_8051_core (
. wb_rst_i (risc_reset ),
. wb_clk_i (app_clk ),
/turbo8051/trunk/rtl/8051/oc8051_top.v
818,5 → 818,37
`endif
 
 
// synopsys translate_on
// Debug Purpose only
// Stack Pointer Push & Pop analysis
reg [7:0] StackMem[$];
reg [7:0] stack_pop;
reg [7:0] pushpop_cnt;
 
// Assumption, Both Write and Read access will not be
// possbile in single clock cycle
always @(posedge wb_clk_i or posedge wb_rst_i)
begin
if(wb_rst_i) begin
pushpop_cnt = 0;
end
else begin
if(ram_wr_sel==`OC8051_RWS_SP) begin
StackMem.push_back(wr_dat);
pushpop_cnt = pushpop_cnt + 1;
end
if(ram_rd_sel==`OC8051_RRS_SP) begin
stack_pop = StackMem.pop_back();
pushpop_cnt = pushpop_cnt - 1;
#2 // Add 1ns Delay to take care of Ram Dealy
if(stack_pop != ram_data) begin
$display("ERROR: Invalid Stack Pointer Pop Detected, Exp: %x,Rxd:%x",stack_pop,ram_data);
$stop;
end
end
end
end
 
// synopsys translate_off
 
endmodule
/turbo8051/trunk/apps/webserver/enc28j60.c
43,10 → 43,10
//}enc28j60_flag;
static BYTE Enc28j60Bank;
static WORD_BYTES next_packet_ptr;
unsigned int iRxFrmCnt = 0;
unsigned int iTxFrmCnt = 0;
unsigned int iRxDescPtr= 0;
unsigned int iTxDescPtr= 0;
extern unsigned int iRxFrmCnt ;
extern unsigned int iTxFrmCnt ;
extern unsigned int iRxDescPtr;
extern unsigned int iTxDescPtr;
 
//*******************************************************************************************
//
148,58 → 148,45
// Description : Send packet to network.
//
//*******************************************************************************************
void enc28j60_packet_send ( XBYTE *buffer, WORD length )
void enc28j60_packet_send ( BYTE **buffer, WORD length )
{
WORD_BYTES iRxFrmStatus, data_length;
__xdata __at (0xA030) unsigned int iMacRxFrmCnt;
XDWORD *pTxDesPtr;
__xdata unsigned int tDataPtr; // Temp DataPointer
 
XDWORD iWrData;
XWORD iTxNextPtr;
pTxDesPtr = (XDWORD *) (0x7040 | iTxDescPtr);
//*pTxDesPtr = (length & 0xFFF) ;
*pTxDesPtr = (XDWORD ) buffer ;
*pTxDesPtr = (*pTxDesPtr >> 2); // Aligned 32 bit addressing
*pTxDesPtr = (*pTxDesPtr << 12); // Move to Address Position
*pTxDesPtr |= (length & 0xFFF);
iWrData = (XDWORD) *buffer;
iWrData = iWrData >> 2; // Aligned 32bit Addressing
iWrData = iWrData << 12; // Move the Address
iWrData |= (length & 0xFFF);
*pTxDesPtr = iWrData;
// *pTxDesPtr |= ((buffer << 12) & 0x3FFF000);
iTxDescPtr = (iTxDescPtr+4) & 0x3F;
iTxFrmCnt = iRxFrmCnt+1;
 
iTxNextPtr = (WORD) *buffer;
iTxNextPtr = iTxNextPtr+length; // 32 Bit Aligned
iTxNextPtr &= 0x3FFC; // 4K Aligned, Last 2 bit Zero, 32 Bit Aligned
*buffer = (BYTE *)iTxNextPtr;
}
//*******************************************************************************************
//
// Function : enc28j60_mac_is_linked
// Description : return MAC link status.
//
/*******************************************************************************************
/*
BYTE enc28j60_mac_is_linked(void)
 
WORD enc28j60_packet_receive ( BYTE **rxtx_buffer, WORD max_length )
{
if ( (enc28j60_read_phyreg(PHSTAT1) & PHSTAT1_LLSTAT ) )
return 1;
else
return 0;
}
*/
//*******************************************************************************************
//
// Function : ethPakcetReceive
// Description : check received packet and return length of data
//
//*******************************************************************************************
//WORD data_length;
WORD enc28j60_packet_receive ( BYTE *rxtx_buffer, WORD max_length )
{
WORD_BYTES iRxFrmStatus, data_length;
__xdata __at (0xA030) unsigned int iMacRxFrmCnt;
__xdata unsigned long *pRxDesPtr;
 
data_length.word = 0; // init
 
// check if a packet has been received and buffered
if((iMacRxFrmCnt & 0xF) != 0) { // Check the Rx Q Counter
pRxDesPtr = (__xdata unsigned long *) (0x7000 | iRxDescPtr);
data_length.word = *pRxDesPtr & 0xFFF; // Last 12 bit indicate the Length of the Packet
rxtx_buffer = ((*pRxDesPtr >> 12) & 0x3FFF) << 2 ; // 32 bit Aligned Address
*rxtx_buffer = (BYTE*) (((*pRxDesPtr >> 12) & 0x3FFF) << 2) ; // 32 bit Aligned Address
iRxFrmStatus.word= *pRxDesPtr >> 26; // Upper 6 Bit Inidcate the Rx Status
iRxDescPtr = (iRxDescPtr+4) & 0x3F;
iRxFrmCnt = iRxFrmCnt+1;
/turbo8051/trunk/apps/webserver/menu.c
64,6 → 64,31
"ADC0 & Temp"
};
 
extern union flag1
{
BYTE byte;
struct
{
unsigned char key_is_executed:1;
unsigned char update_display:1;
unsigned char lcd_busy:1;
unsigned char key_press:1;
unsigned char send_temp:1;
unsigned char syn_is_sent:1;
unsigned char syn_is_received:1;
unsigned char send_temp_timeout:1;
}bits;
}flag1;
 
extern union flag2
{
BYTE byte;
struct
{
unsigned char key_hold:1;
unsigned char unuse:7;
}bits;
}flag2;
//*****************************************************************************************
//
// Function : my_memcpy
/turbo8051/trunk/apps/webserver/enc28j60.h
282,16 → 282,16
 
// functions
extern BYTE enc28j60ReadOp(BYTE op, BYTE address);
extern void enc28j60WriteOp(BYTE op, BYTE address, BYTE data);
extern void enc28j60WriteOp(BYTE op, BYTE address, BYTE datap);
extern void enc28j60SetBank(BYTE address);
extern BYTE enc28j60Read(BYTE address);
extern void enc28j60Write(BYTE address, BYTE data);
extern void enc28j60Write(BYTE address, BYTE datap);
extern WORD enc28j60_read_phyreg(BYTE address);
extern void enc28j60PhyWrite(BYTE address, WORD data);
extern void enc28j60PhyWrite(BYTE address, WORD datap);
extern void enc28j60_init( BYTE *avr_mac);
extern BYTE enc28j60getrev(void);
extern void enc28j60_packet_send ( XBYTE *buffer, WORD length );
extern void enc28j60_packet_send ( BYTE **buffer, WORD length );
extern BYTE enc28j60_mac_is_linked(void);
extern WORD enc28j60_tx_checksum( WORD offset, WORD len );
extern WORD enc28j60_packet_receive ( BYTE *rxtx_buffer, WORD max_length );
extern WORD enc28j60_packet_receive ( BYTE **rxtx_buffer, WORD max_length );
 
/turbo8051/trunk/apps/webserver/ip.c
50,7 → 50,8
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
//
//********************************************************************************************
static WORD ip_identfier=1;
//static WORD ip_identfier=1;
WORD ip_identfier;
//********************************************************************************************
//
// Function : ip_generate_packet
114,10 → 115,12
{
unsigned char i;
cDebugReg = 0x30; // Debug 1 */
// if ethernet type is not ip
if ( rxtx_buffer[ ETH_TYPE_H_P ] != ETH_TYPE_IP_H_V || rxtx_buffer[ ETH_TYPE_L_P ] != ETH_TYPE_IP_L_V)
return 0;
cDebugReg = 0x31; // Debug 1 */
// if ip packet not send to avr
for ( i=0; i<sizeof(IP_ADDR); i++ )
{
124,6 → 127,7
if ( rxtx_buffer[ IP_DST_IP_P + i ] != avr_ip.byte[i] )
return 0;
}
cDebugReg = 0x32; // Debug 1 */
// destination ip address match with avr ip address
return 1;
/turbo8051/trunk/apps/webserver/includes.h
77,3 → 77,8
//********************************************************************************************
extern void initial_system( void );
 
 
__sfr __at (0x80) cDebugReg; // Debug Reg set to Port-0
 
// IP Frame Numbering
//WORD ip_identfier;
/turbo8051/trunk/apps/webserver/http.c
25,6 → 25,23
//
//********************************************************************************************
#include "includes.h"
 
extern union flag1
{
BYTE byte;
struct
{
unsigned char key_is_executed:1;
unsigned char update_display:1;
unsigned char lcd_busy:1;
unsigned char key_press:1;
unsigned char send_temp:1;
unsigned char syn_is_sent:1;
unsigned char syn_is_received:1;
unsigned char send_temp_timeout:1;
}bits;
}flag1;
 
//********************************************************************************************
//
// Global variable for http.c
40,22 → 57,26
// Description : Initial connection to web server
//
//********************************************************************************************
void http_webserver_process ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip )
void http_webserver_process ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip )
{
WORD dlength, dest_port;
BYTE count_time_temp[3];
BYTE generic_buf[64];
dest_port = (rxtx_buffer[TCP_SRC_PORT_H_P]<<8)|rxtx_buffer[TCP_SRC_PORT_L_P];
dest_port = (rx_buffer[TCP_SRC_PORT_H_P]<<8)|rx_buffer[TCP_SRC_PORT_L_P];
 
cDebugReg = 0x40;
// tcp port 80 start for web server
if ( rxtx_buffer [ IP_PROTO_P ] == IP_PROTO_TCP_V && rxtx_buffer[ TCP_DST_PORT_H_P ] == 0 && rxtx_buffer[ TCP_DST_PORT_L_P ] == 80 )
if ( rx_buffer [ IP_PROTO_P ] == IP_PROTO_TCP_V && rx_buffer[ TCP_DST_PORT_H_P ] == 0 && rx_buffer[ TCP_DST_PORT_L_P ] == 80 )
{
cDebugReg = 0x41;
// received packet with flags "SYN", let's send "SYNACK"
if ( (rxtx_buffer[ TCP_FLAGS_P ] & TCP_FLAG_SYN_V) )
if ( (rx_buffer[ TCP_FLAGS_P ] & TCP_FLAG_SYN_V) )
{
// tcp_send_synack ( rxtx_buffer, dest_mac, dest_ip );
cDebugReg = 0x42;
// tcp_send_synack ( tx_buffer, dest_mac, dest_ip );
tcp_send_packet (
rxtx_buffer,
*tx_buffer,
dest_port,
80, // source port
TCP_FLAG_SYN_V|TCP_FLAG_ACK_V, // flag
65,22 → 86,27
0, // tcp data length
dest_mac, // server mac address
dest_ip ); // server ip address
cDebugReg = 0x43;
flag1.bits.syn_is_received = 1;
return;
}
 
if ( (rxtx_buffer [ TCP_FLAGS_P ] & TCP_FLAG_ACK_V) )
if ( (rx_buffer [ TCP_FLAGS_P ] & TCP_FLAG_ACK_V) )
{
cDebugReg = 0x44;
// get tcp data length
dlength = tcp_get_dlength( rxtx_buffer );
dlength = tcp_get_dlength( rx_buffer );
cDebugReg = 0x45;
if ( dlength == 0 )
{
cDebugReg = 0x46;
// finack, answer with ack
if ( (rxtx_buffer[TCP_FLAGS_P] & TCP_FLAG_FIN_V) )
if ( (rx_buffer[TCP_FLAGS_P] & TCP_FLAG_FIN_V) )
{
// tcp_send_ack ( rxtx_buffer, dest_mac, dest_ip );
cDebugReg = 0x47;
// tcp_send_ack ( tx_buffer, dest_mac, dest_ip );
tcp_send_packet (
rxtx_buffer,
*tx_buffer,
dest_port,
80, // source port
TCP_FLAG_ACK_V, // flag
90,26 → 116,28
0, // tcp data length
dest_mac, // server mac address
dest_ip ); // server ip address
cDebugReg = 0x48;
}
return;
}
// get avr ip address from request and set to new avr ip address
// get send temparature to server configuration
if ( http_get_variable ( rxtx_buffer, dlength, "tc", generic_buf ) )
if ( http_get_variable ( rx_buffer, dlength, "tc", generic_buf ) )
{
cDebugReg = 0x49;
// enable or disable send temparature
if ( http_get_variable ( rxtx_buffer, dlength, "en", generic_buf ) )
if ( http_get_variable ( rx_buffer, dlength, "en", generic_buf ) )
count_time_temp[0] = 1;
else
count_time_temp[0] = 0;
// get hour
if ( http_get_variable ( rxtx_buffer, dlength, "h", generic_buf ) )
if ( http_get_variable ( rx_buffer, dlength, "h", generic_buf ) )
{
count_time_temp[1] = (generic_buf[0] - '0') * 10;
count_time_temp[1] = count_time_temp[1] + (generic_buf[1] - '0');
}
// get minute
if ( http_get_variable ( rxtx_buffer, dlength, "m", generic_buf ) )
if ( http_get_variable ( rx_buffer, dlength, "m", generic_buf ) )
{
count_time_temp[2] = (generic_buf[0] - '0') * 10;
count_time_temp[2] = count_time_temp[2] + (generic_buf[1] - '0');
120,12 → 148,13
count_time[3] = 0;
}
 
cDebugReg = 0x4A;
// print webpage
dlength = http_home( rxtx_buffer );
dlength = http_home( rx_buffer );
// send ack before send data
// tcp_send_ack ( rxtx_buffer, dest_mac, dest_ip );
// tcp_send_ack ( tx_buffer, dest_mac, dest_ip );
tcp_send_packet (
rxtx_buffer,
*tx_buffer,
dest_port,
80, // source port
TCP_FLAG_ACK_V, // flag
135,10 → 164,11
0, // tcp data length
dest_mac, // server mac address
dest_ip ); // server ip address
cDebugReg = 0x4B;
// send tcp data
// tcp_send_data ( rxtx_buffer, dest_mac, dest_ip, dlength );
// tcp_send_data ( tx_buffer, dest_mac, dest_ip, dlength );
tcp_send_packet (
rxtx_buffer,
*tx_buffer,
dest_port,
80, // source port
TCP_FLAG_ACK_V | TCP_FLAG_PSH_V | TCP_FLAG_FIN_V, // flag
148,6 → 178,7
dlength, // tcp data length
dest_mac, // server mac address
dest_ip ); // server ip address
cDebugReg = 0x4C;
flag1.bits.syn_is_received = 0;
}
}
213,6 → 244,7
// get data position
data_p = tcp_get_hlength( rxtx_buffer ) + sizeof(ETH_HEADER) + sizeof(IP_HEADER);
 
cDebugReg = 0x4D;
// Find '?' in rx buffer, if found '?' in rx buffer then let's find variable key (val_key)
for ( ; data_p<dlength; data_p++ )
{
223,6 → 255,8
if ( data_p == dlength )
return 0;
cDebugReg = 0x4E;
// find variable key in buffer
for ( ; data_p<dlength; data_p++ )
{
251,6 → 285,7
}
}
cDebugReg = 0x4F;
// if found variable keyword, then store variable value in destination buffer ( dest )
if ( match != 0 )
{
/turbo8051/trunk/apps/webserver/arp.c
129,9 → 129,12
rxtx_buffer[ ARP_OPCODE_H_P ] = ARP_OPCODE_REQUEST_H_V;
rxtx_buffer[ ARP_OPCODE_L_P ] = ARP_OPCODE_REQUEST_L_V;
arp_generate_packet ( rxtx_buffer, (BYTE*)&dest_mac, dest_ip );
 
cDebugReg = 0x10; // Debug 1
// send arp packet to network
enc28j60_packet_send ( rxtx_buffer, sizeof(ETH_HEADER) + sizeof(ARP_PACKET) );
enc28j60_packet_send ( &rxtx_buffer, sizeof(ETH_HEADER) + sizeof(ARP_PACKET) );
cDebugReg = 0x11; // Debug 1
}
//*******************************************************************************************
//
146,10 → 149,14
// if packet type is not arp packet exit from function
if( rxtx_buffer[ ETH_TYPE_H_P ] != ETH_TYPE_ARP_H_V || rxtx_buffer[ ETH_TYPE_L_P ] != ETH_TYPE_ARP_L_V)
return 0;
cDebugReg = 0x12; // Debug 1
// check arp request opcode
if ( rxtx_buffer[ ARP_OPCODE_H_P ] != ((opcode >> 8) & 0xFF) ||
rxtx_buffer[ ARP_OPCODE_L_P ] != (opcode & 0xFF) )
return 0;
cDebugReg = 0x13; // Debug 1
// if destination ip address in arp packet not match with avr ip address
for ( i=0; i<sizeof(IP_ADDR); i++ )
{
156,6 → 163,7
if ( rxtx_buffer[ ARP_DST_IP_P + i] != avr_ip.byte[i] )
return 0;
}
cDebugReg = 0x14; // Debug 1
return 1;
}
//*******************************************************************************************
164,18 → 172,21
// Description : Send reply if recieved packet is ARP and IP address is match with avr_ip
//
//*******************************************************************************************
void arp_send_reply ( BYTE *rxtx_buffer, BYTE *dest_mac )
void arp_send_reply ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac )
{
// generate ethernet header
eth_generate_header ( rxtx_buffer, ETH_TYPE_ARP_V, dest_mac );
eth_generate_header ( *tx_buffer, ETH_TYPE_ARP_V, dest_mac );
 
cDebugReg = 0x15; // Debug 1
// change packet type to echo reply
rxtx_buffer[ ARP_OPCODE_H_P ] = ARP_OPCODE_REPLY_H_V;
rxtx_buffer[ ARP_OPCODE_L_P ] = ARP_OPCODE_REPLY_L_V;
arp_generate_packet ( rxtx_buffer, dest_mac, &rxtx_buffer[ ARP_SRC_IP_P ] );
*tx_buffer[ARP_OPCODE_H_P] = ARP_OPCODE_REPLY_H_V;
*tx_buffer[ARP_OPCODE_L_P] = ARP_OPCODE_REPLY_L_V;
cDebugReg = 0x16; // Debug 1
arp_generate_packet ( *tx_buffer, dest_mac, rx_buffer[ ARP_SRC_IP_P ] );
cDebugReg = 0x17; // Debug 1
// send arp packet
enc28j60_packet_send ( rxtx_buffer, sizeof(ETH_HEADER) + sizeof(ARP_PACKET) );
enc28j60_packet_send ( &(*tx_buffer), sizeof(ETH_HEADER) + sizeof(ARP_PACKET) );
}
//*******************************************************************************************
//
191,12 → 202,13
 
// send arp request packet to network
arp_send_request ( rxtx_buffer, dest_ip );
cDebugReg = 0x18; // Debug 1
 
for ( i=0; i<10; i++ )
{
// Time out 10x10ms = 100ms
_delay_ms ( 10 );
dlength = enc28j60_packet_receive( rxtx_buffer, MAX_RXTX_BUFFER );
dlength = enc28j60_packet_receive( &rxtx_buffer, MAX_RXTX_BUFFER );
 
// destination ip address was found on network
if ( dlength )
209,6 → 221,7
}
}
}
cDebugReg = 0x19; // Debug 1
// destination ip was not found on network
return 0;
/turbo8051/trunk/apps/webserver/main.c
42,7 → 42,34
MAC_ADDR server_mac;
IP_ADDR server_ip;
 
extern WORD ip_identfier;
 
union flag1
{
BYTE byte;
struct
{
unsigned char key_is_executed:1;
unsigned char update_display:1;
unsigned char lcd_busy:1;
unsigned char key_press:1;
unsigned char send_temp:1;
unsigned char syn_is_sent:1;
unsigned char syn_is_received:1;
unsigned char send_temp_timeout:1;
}bits;
}flag1;
 
union flag2
{
BYTE byte;
struct
{
unsigned char key_hold:1;
unsigned char unuse:7;
}bits;
}flag2;
 
//BYTE generic_buf[128];
 
// Change your avr and server ip address here
50,8 → 77,24
BYTE ee_avr_ip[4] = { 10, 1, 1, 1 };
BYTE ee_server_ip[4] = { 10, 1, 1, 76 };
 
unsigned int iRxFrmCnt = 0;
unsigned int iTxFrmCnt = 0;
unsigned int iRxDescPtr= 0;
unsigned int iTxDescPtr= 0;
 
 
 
void _delay_ms( int iDelay );
//--------------------------
// Data Memory MAP
//-------------------------
// 0x0000 to 0x0FFF - 4K - Processor Data Memory
// 0x1000 to 0x1FFF - 4K - Gmac Rx Data Memory
// 0x2000 to 0x2FFF - 4K - Reserved for Rx
// 0x3000 to 0x3FFF - 4K - Gmac Tx Data Memory
// 0x4000 to 0x4FFF - 4K - Reserved for Tx
// 0x7000 to 0x703F - 64 - Rx Descriptor
// 0x7040 to 0x707F - 64 - Tx Descripto
//*****************************************************************************************
//
// Function : server_process
58,56 → 101,75
// Description : Run web server and listen on port 80
//
//*****************************************************************************************
void server_process ( void )
void server_process ( BYTE **tx_buffer )
{
MAC_ADDR client_mac;
IP_ADDR client_ip;
// you can change rx,tx buffer size in includes.h
BYTE *rxtx_buffer;
BYTE *rx_buffer;
WORD plen;
if ( flag1.bits.syn_is_sent )
return;
cDebugReg = 0x1; // Debug 1
//if ( flag1.bits.syn_is_sent )
// return;
// get new packet
plen = enc28j60_packet_receive( (BYTE*)&rxtx_buffer, MAX_RXTX_BUFFER );
plen = enc28j60_packet_receive( &rx_buffer, MAX_RXTX_BUFFER);
 
cDebugReg = 0x2; // Debug 1
//plen will ne unequal to zero if there is a valid packet (without crc error)
if(plen==0)
return;
cDebugReg = 0x3; // Debug 1
 
// copy client mac address from buffer to client mac variable
memcpy ( (BYTE*)&client_mac, &rxtx_buffer[ ETH_SRC_MAC_P ], sizeof(MAC_ADDR) );
memcpy ( (BYTE*)client_mac, &rx_buffer[ ETH_SRC_MAC_P ], sizeof(MAC_ADDR) );
 
cDebugReg = 0x4; // Debug 1
// check arp packet if match with avr ip let's send reply
if ( arp_packet_is_arp( rxtx_buffer, ARP_OPCODE_REQUEST_V ) )
if ( arp_packet_is_arp( rx_buffer, ARP_OPCODE_REQUEST_V ) )
{
arp_send_reply ( (BYTE*)&rxtx_buffer, (BYTE*)&client_mac );
cDebugReg = 0x5; // Debug 1
arp_send_reply ( rx_buffer, &(*tx_buffer), (BYTE*)&client_mac );
cDebugReg = 0x6; // Debug 1
return;
}
 
cDebugReg = 0x7; // Debug 1
// get client ip address
memcpy ( (BYTE*)&client_ip, &rxtx_buffer[ IP_SRC_IP_P ], sizeof(IP_ADDR) );
memcpy ( (BYTE*)&client_ip, &rx_buffer[ IP_SRC_IP_P ], sizeof(IP_ADDR) );
cDebugReg = 0x8; // Debug 1
// check ip packet send to avr or not?
if ( ip_packet_is_ip ( (BYTE*)&rxtx_buffer ) == 0 )
if ( ip_packet_is_ip ( rx_buffer ) == 0 )
{
cDebugReg = 0x9; // Debug 1
return;
}
 
// check ICMP packet, if packet is icmp packet let's send icmp echo reply
if ( icmp_send_reply ( (BYTE*)&rxtx_buffer, (BYTE*)&client_mac, (BYTE*)&client_ip ) )
cDebugReg = 0xA; // Debug 1 */
if ( icmp_send_reply ( rx_buffer, &(*tx_buffer), (BYTE*)&client_mac, (BYTE*)&client_ip ) )
{
cDebugReg = 0xB; // Debug 1
return;
}
 
cDebugReg = 0xC; // Debug 1
// check UDP packet
if (udp_receive ( (BYTE *)&rxtx_buffer, (BYTE *)&client_mac, (BYTE *)&client_ip ))
if (udp_receive ( rx_buffer, (BYTE *)&client_mac, (BYTE *)&client_ip ))
{
cDebugReg = 0xD; // Debug 1
return;
}
cDebugReg = 0xE; // Debug 1
// tcp start here
// start web server at port 80, see http.c
http_webserver_process ( (BYTE*)rxtx_buffer, (BYTE*)&client_mac, (BYTE*)&client_ip );
http_webserver_process ( rx_buffer, &(*tx_buffer),(BYTE*)&client_mac, (BYTE*)&client_ip );
cDebugReg = 0xF; // Debug 1
}
//*****************************************************************************************
//
129,6 → 191,8
//*****************************************************************************************
int main (void)
{
BYTE i;
BYTE *tx_buffer;
// change your mac address here
avr_mac.byte[0] = 'A';
avr_mac.byte[1] = 'V';
136,9 → 200,25
avr_mac.byte[3] = 'P';
avr_mac.byte[4] = 'O';
avr_mac.byte[5] = 'R';
// change your IP address here
avr_ip.byte[0] = 10;
avr_ip.byte[1] = 1;
avr_ip.byte[2] = 1;
avr_ip.byte[3] = 1;
 
// read avr and server ip from eeprom
iRxFrmCnt = 0;
iTxFrmCnt = 0;
iRxDescPtr= 0;
iTxDescPtr= 0;
 
ip_identfier=1;
 
// Initialise Transmit Data Pointer
tx_buffer = 0x3000; // GMAC Tx Data Memory, 4K Size
//eeprom_read_block ( &avr_ip, ee_avr_ip, 4 );
//eeprom_read_block ( &server_ip, ee_server_ip, 4 );
// setup port as input and enable pull-up
155,8 → 235,8
//TCCR1B = 0x01; // clk/1 no prescaling
 
// initial lcd, and menu
lcd_init ();
menu_init ();
//lcd_init ();
//menu_init ();
 
// set LED1, LED2 as output */
//LED_DDR |= _BV( LED_PIN1_DDR ) | _BV( LED_PIN2_DDR );
176,10 → 256,10
 
// general time base, generate by timer1
// overflow every 1/250 seconds
time_base ();
//time_base ();
// server process response for arp, icmp, http
server_process ();
server_process (&tx_buffer);
 
// send temparature to web server unsing http protocol
// disable by default.
/turbo8051/trunk/apps/webserver/http.h
34,5 → 34,5
extern BYTE http_get_variable ( BYTE *rxtx_buffer, WORD dlength, BYTE *val_key, BYTE *dest );
extern BYTE http_get_ip ( BYTE *buf, BYTE *dest );
extern void urldecode( BYTE *urlbuf);
extern void http_webserver_process ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern void http_webserver_process ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern WORD http_put_request ( BYTE *rxtx_buffer );
/turbo8051/trunk/apps/webserver/tcp.c
67,6 → 67,7
{
int dlength, hlength;
 
cDebugReg = 0x50;
dlength = ( rxtx_buffer[ IP_TOTLEN_H_P ] <<8 ) | ( rxtx_buffer[ IP_TOTLEN_L_P ] );
dlength -= sizeof(IP_HEADER);
hlength = (rxtx_buffer[ TCP_HEADER_LEN_P ]>>4) * 4; // generate len in bytes;
74,6 → 75,7
if ( dlength <= 0 )
dlength=0;
cDebugReg = 0x51;
return ((WORD)dlength);
}
//*****************************************************************************************
84,6 → 86,7
//*****************************************************************************************
BYTE tcp_get_hlength ( BYTE *rxtx_buffer )
{
cDebugReg = 0x52;
return ((rxtx_buffer[ TCP_HEADER_LEN_P ]>>4) * 4); // generate len in bytes;
}
//********************************************************************************************
96,6 → 99,7
{
BYTE ch;
cDebugReg = 0x53;
while(ch = *datap++)
{
rxtx_buffer[ TCP_DATA_P + offset ] = ch;
112,6 → 116,7
//********************************************************************************************
WORD tcp_puts_data ( BYTE *rxtx_buffer, BYTE *datap, WORD offset )
{
cDebugReg = 0x54;
while( *datap )
{
rxtx_buffer[ TCP_DATA_P + offset ] = *datap++;
141,8 → 146,10
BYTE i, tseq;
WORD ck;
cDebugReg = 0x55;
// generate ethernet header
eth_generate_header ( rxtx_buffer, ETH_TYPE_IP_V, dest_mac );
cDebugReg = 0x56;
 
// sequence numbers:
// add the rel ack num to SEQACK
161,6 → 168,7
}
}
cDebugReg = 0x57;
// initial tcp sequence number
// setup maximum segment size
// require to setup first packet is receive or transmit only
187,9 → 195,11
// no options: 20 bytes: 5*32/8 = 20
rxtx_buffer[ TCP_HEADER_LEN_P ] = 0x50;
}
cDebugReg = 0x58;
 
// generate ip header and checksum
ip_generate_header ( rxtx_buffer, (sizeof(IP_HEADER) + sizeof(TCP_HEADER) + dlength), IP_PROTO_TCP_V, dest_ip );
cDebugReg = 0x59;
// clear sequence ack number before send tcp SYN packet
if ( clear_seqack )
200,6 → 210,7
rxtx_buffer[ TCP_SEQACK_P + 3 ] = 0;
}
cDebugReg = 0x5A;
// setup tcp flags
rxtx_buffer [ TCP_FLAGS_P ] = flags;
222,6 → 233,7
// clear old checksum and calculate new checksum
rxtx_buffer[ TCP_CHECKSUM_H_P ] = 0;
rxtx_buffer[ TCP_CHECKSUM_L_P ] = 0;
cDebugReg = 0x5B;
// This is computed as the 16-bit one's complement of the one's complement
// sum of a pseudo header of information from the
// IP header, the TCP header, and the data, padded
237,10 → 249,13
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// + 0 + IP Protocol + Total length +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
ck = software_checksum( &rxtx_buffer[IP_SRC_IP_P], sizeof(TCP_HEADER)+dlength+8, IP_PROTO_TCP_V + sizeof(TCP_HEADER) + dlength );
ck = software_checksum( rxtx_buffer[IP_SRC_IP_P], sizeof(TCP_HEADER)+dlength+8, IP_PROTO_TCP_V + sizeof(TCP_HEADER) + dlength );
rxtx_buffer[ TCP_CHECKSUM_H_P ] = (ck >> 8) & 0xFF;
rxtx_buffer[ TCP_CHECKSUM_L_P ] = ck & 0xFF;
cDebugReg = 0x5C;
 
// send packet to ethernet media
enc28j60_packet_send ( rxtx_buffer, sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(TCP_HEADER)+dlength );
enc28j60_packet_send ( &rxtx_buffer, sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(TCP_HEADER)+dlength );
cDebugReg = 0x5D;
}
/turbo8051/trunk/apps/webserver/arp.h
29,7 → 29,7
#define ARP_OPCODE_REQUEST_V 0x0001
#define ARP_OPCODE_REQUEST_H_V 0x00
#define ARP_OPCODE_REQUEST_L_V 0x01
#define ARP_OPCODE_REPLY_V 0x0002
#define ARP_OPCODE_REPLY_V 0x0002
#define ARP_OPCODE_REPLY_H_V 0x00
#define ARP_OPCODE_REPLY_L_V 0x02
 
60,6 → 60,6
//********************************************************************************************
extern void arp_generate_packet ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern void arp_send_request ( BYTE *rxtx_buffer, BYTE *dest_ip );
extern void arp_send_reply ( BYTE *rxtx_buffer, BYTE *dest_mac );
extern void arp_send_reply ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac );
extern BYTE arp_packet_is_arp ( BYTE *rxtx_buffer, WORD opcode );
extern BYTE arp_who_is ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip );
/turbo8051/trunk/apps/webserver/icmp.c
60,29 → 60,32
// Description : Send ARP reply packet from ARP request packet
//
//*******************************************************************************************
void icmp_generate_packet ( BYTE *rxtx_buffer )
void icmp_generate_packet ( BYTE *rx_buffer, BYTE *tx_buffer )
{
BYTE i;
WORD ck;
// In send ICMP request case, generate new ICMP data.
if ( rxtx_buffer[ ICMP_TYPE_P ] == ICMP_TYPE_ECHOREQUEST_V )
if ( rx_buffer[ ICMP_TYPE_P ] == ICMP_TYPE_ECHOREQUEST_V )
{
cDebugReg = 0x20; // Debug 1 */
for ( i=0; i<ICMP_MAX_DATA; i++ )
{
rxtx_buffer[ ICMP_DATA_P + i ] = 'A' + i;
tx_buffer[ ICMP_DATA_P + i ] = 'A' + i;
}
}
cDebugReg = 0x21; // Debug 1 */
// clear icmp checksum
rxtx_buffer[ ICMP_CHECKSUM_H_P ] = 0;
rxtx_buffer[ ICMP_CHECKSUM_L_P ] = 0;
tx_buffer[ ICMP_CHECKSUM_H_P ] = 0;
tx_buffer[ ICMP_CHECKSUM_L_P ] = 0;
 
// calculate new checksum.
// ICMP checksum calculation begin at ICMP type to ICMP data.
// Before calculate new checksum the checksum field must be zero.
ck = software_checksum ( &rxtx_buffer[ ICMP_TYPE_P ], sizeof(ICMP_PACKET), 0 );
rxtx_buffer[ ICMP_CHECKSUM_H_P ] = (ck >> 8 ) & 0xFF;
rxtx_buffer[ ICMP_CHECKSUM_L_P ] = ck & 0xFF;
ck = software_checksum ( tx_buffer[ ICMP_TYPE_P ], sizeof(ICMP_PACKET), 0 );
cDebugReg = 0x22; // Debug 1 */
tx_buffer[ ICMP_CHECKSUM_H_P ] = (ck >> 8 ) & 0xFF;
tx_buffer[ ICMP_CHECKSUM_L_P ] = ck & 0xFF;
}
//*******************************************************************************************
//
90,27 → 93,27
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void icmp_send_request ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip )
void icmp_send_request ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip )
{
// set ethernet header
eth_generate_header ( rxtx_buffer, ETH_TYPE_IP_V, dest_mac );
eth_generate_header ( *tx_buffer, ETH_TYPE_IP_V, dest_mac );
// generate ip header and checksum
ip_generate_header ( rxtx_buffer, sizeof(IP_HEADER) + sizeof(ICMP_PACKET), IP_PROTO_ICMP_V, dest_ip );
ip_generate_header ( *tx_buffer, sizeof(IP_HEADER) + sizeof(ICMP_PACKET), IP_PROTO_ICMP_V, dest_ip );
 
// generate icmp packet and checksum
rxtx_buffer[ ICMP_TYPE_P ] = ICMP_TYPE_ECHOREQUEST_V;
rxtx_buffer[ ICMP_CODE_P ] = 0;
rxtx_buffer[ ICMP_IDENTIFIER_H_P ] = icmp_id;
rxtx_buffer[ ICMP_IDENTIFIER_L_P ] = 0;
rxtx_buffer[ ICMP_SEQUENCE_H_P ] = icmp_seq;
rxtx_buffer[ ICMP_SEQUENCE_L_P ] = 0;
*tx_buffer[ ICMP_TYPE_P ] = ICMP_TYPE_ECHOREQUEST_V;
*tx_buffer[ ICMP_CODE_P ] = 0;
*tx_buffer[ ICMP_IDENTIFIER_H_P ] = icmp_id;
*tx_buffer[ ICMP_IDENTIFIER_L_P ] = 0;
*tx_buffer[ ICMP_SEQUENCE_H_P ] = icmp_seq;
*tx_buffer[ ICMP_SEQUENCE_L_P ] = 0;
icmp_id++;
icmp_seq++;
icmp_generate_packet ( rxtx_buffer );
icmp_generate_packet ( rx_buffer, *tx_buffer );
 
// send packet to ethernet media
enc28j60_packet_send ( rxtx_buffer, sizeof(ETH_HEADER) + sizeof(IP_HEADER) + sizeof(ICMP_PACKET) );
enc28j60_packet_send ( &(*tx_buffer), sizeof(ETH_HEADER) + sizeof(IP_HEADER) + sizeof(ICMP_PACKET) );
}
//*******************************************************************************************
//
118,29 → 121,36
// Description : Send ARP reply packet to destination.
//
//*******************************************************************************************
BYTE icmp_send_reply ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip )
BYTE icmp_send_reply ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip )
{
// check protocol is icmp or not?
if ( rxtx_buffer [ IP_PROTO_P ] != IP_PROTO_ICMP_V )
if ( rx_buffer [ IP_PROTO_P ] != IP_PROTO_ICMP_V )
return 0;
cDebugReg = 0x23; // Debug 1 */
// check icmp packet type is echo request or not?
if ( rxtx_buffer [ ICMP_TYPE_P ] != ICMP_TYPE_ECHOREQUEST_V )
if ( rx_buffer [ ICMP_TYPE_P ] != ICMP_TYPE_ECHOREQUEST_V )
return 0;
cDebugReg = 0x24; // Debug 1 */
 
// set ethernet header
eth_generate_header ( rxtx_buffer, ETH_TYPE_IP_V, dest_mac );
eth_generate_header ( *tx_buffer, ETH_TYPE_IP_V, dest_mac );
 
cDebugReg = 0x25; // Debug 1 */
// generate ip header and checksum
ip_generate_header ( rxtx_buffer, (rxtx_buffer[IP_TOTLEN_H_P]<<8)|rxtx_buffer[IP_TOTLEN_L_P], IP_PROTO_ICMP_V, dest_ip );
ip_generate_header ( *tx_buffer, (rx_buffer[IP_TOTLEN_H_P]<<8)|rx_buffer[IP_TOTLEN_L_P], IP_PROTO_ICMP_V, dest_ip );
 
cDebugReg = 0x26; // Debug 1 */
// generate icmp packet
rxtx_buffer[ ICMP_TYPE_P ] = ICMP_TYPE_ECHOREPLY_V;
icmp_generate_packet ( rxtx_buffer );
*tx_buffer[ ICMP_TYPE_P ] = ICMP_TYPE_ECHOREPLY_V;
icmp_generate_packet ( rx_buffer, *tx_buffer );
 
cDebugReg = 0x27; // Debug 1 */
// send packet to ethernet media
enc28j60_packet_send ( rxtx_buffer, sizeof(ETH_HEADER) + sizeof(IP_HEADER) + sizeof(ICMP_PACKET) );
enc28j60_packet_send ( &(*tx_buffer), sizeof(ETH_HEADER) + sizeof(IP_HEADER) + sizeof(ICMP_PACKET) );
cDebugReg = 0x28; // Debug 1 */
return 1;
}
//*******************************************************************************************
149,32 → 159,35
// Description : Send ARP reply packet to destination.
//
//*******************************************************************************************
BYTE icmp_ping ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip )
BYTE icmp_ping ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip )
{
BYTE i;
WORD dlength;
// destination ip was not found on network.
if ( arp_who_is ( rxtx_buffer, dest_mac, dest_ip ) == 0 )
if ( arp_who_is ( rx_buffer, dest_mac, dest_ip ) == 0 )
return 0;
 
cDebugReg = 0x29; // Debug 1 */
// send icmp request packet (ping) to server
icmp_send_request ( rxtx_buffer, (BYTE*)&server_mac, dest_ip );
icmp_send_request ( rx_buffer, &(*tx_buffer), (BYTE*)&server_mac, dest_ip );
 
for ( i=0; i<10; i++ )
{
_delay_ms( 10 );
dlength = enc28j60_packet_receive( rxtx_buffer, MAX_RXTX_BUFFER );
dlength = enc28j60_packet_receive( &(*tx_buffer), MAX_RXTX_BUFFER );
 
if ( dlength )
{
// check protocol is icmp or not?
if ( rxtx_buffer [ IP_PROTO_P ] != IP_PROTO_ICMP_V )
if ( rx_buffer [ IP_PROTO_P ] != IP_PROTO_ICMP_V )
continue;
cDebugReg = 0x2A; // Debug 1 */
// check icmp packet type is echo reply or not?
if ( rxtx_buffer [ ICMP_TYPE_P ] != ICMP_TYPE_ECHOREPLY_V )
if ( rx_buffer [ ICMP_TYPE_P ] != ICMP_TYPE_ECHOREPLY_V )
continue;
cDebugReg = 0x2B; // Debug 1 */
 
return 1;
}
/turbo8051/trunk/apps/webserver/udp.c
25,6 → 25,23
//
//********************************************************************************************
#include "includes.h"
 
extern union flag1
{
BYTE byte;
struct
{
unsigned char key_is_executed:1;
unsigned char update_display:1;
unsigned char lcd_busy:1;
unsigned char key_press:1;
unsigned char send_temp:1;
unsigned char syn_is_sent:1;
unsigned char syn_is_received:1;
unsigned char send_temp_timeout:1;
}bits;
}flag1;
 
//********************************************************************************************
// The User Datagram Protocol offers only a minimal transport service
// -- non-guaranteed datagram delivery
263,7 → 280,7
udp_generate_header (rxtx_buffer, (rxtx_buffer[UDP_SRC_PORT_H_P]<<8)|rxtx_buffer[UDP_SRC_PORT_L_P], sizeof(UDP_HEADER)+dlength.word);
 
// send packet to ethernet media
enc28j60_packet_send ( rxtx_buffer, sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(UDP_HEADER)+dlength.word );
enc28j60_packet_send ( &rxtx_buffer, sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(UDP_HEADER)+dlength.word );
 
return 1;
}
/turbo8051/trunk/apps/webserver/struct.h
174,13 → 174,13
{
WORD hardware_type;
WORD protocol_type;
BYTE hardware_length;
BYTE protocol_length;
BYTE hardware_length;
BYTE protocol_length;
WORD opcode;
MAC_ADDR src_mac;
IP_ADDR src_ip;
MAC_ADDR dest_mac;
IP_ADDR dest_ip;
MAC_ADDR src_mac;
IP_ADDR src_ip;
MAC_ADDR dest_mac;
IP_ADDR dest_ip;
} ARP_PACKET;
 
// ICMP packet structure
246,28 → 246,3
WORD checksum;
} UDP_HEADER;
 
union flag1
{
BYTE byte;
struct
{
unsigned char key_is_executed:1;
unsigned char update_display:1;
unsigned char lcd_busy:1;
unsigned char key_press:1;
unsigned char send_temp:1;
unsigned char syn_is_sent:1;
unsigned char syn_is_received:1;
unsigned char send_temp_timeout:1;
}bits;
}flag1;
 
union flag2
{
BYTE byte;
struct
{
unsigned char key_hold:1;
unsigned char unuse:7;
}bits;
}flag2;
/turbo8051/trunk/apps/webserver/tcp.h
60,8 → 60,8
//********************************************************************************************
extern WORD tcp_get_dlength ( BYTE *rxtx_buffer );
extern BYTE tcp_get_hlength ( BYTE *rxtx_buffer );
extern WORD tcp_puts_data ( BYTE *rxtx_buffer, BYTE *data, WORD offset );
extern WORD tcp_puts_data_p ( BYTE *rxtx_buffer, BYTE *data, WORD offset );
extern WORD tcp_puts_data ( BYTE *rxtx_buffer, BYTE *datap, WORD offset );
extern WORD tcp_puts_data_p ( BYTE *rxtx_buffer, BYTE *datap, WORD offset );
 
extern void tcp_send_packet (
BYTE *rxtx_buffer,
/turbo8051/trunk/apps/webserver/Makefile
1,24 → 1,24
#
#
#
 
SHELL = /bin/sh
SDCCFLAGS = --model-large -I /home/dinesha/download/sdcc/device/include/mcs51 -I /home/dinesha/download/sdcc/device/include/ -L /home/dinesha/download/sdcc/device/lib/build/large
ASLINKFLAGS = --code-loc 0x80 --data-loc 0x0020 --stack-loc 0x4000 --xram-loc 0x8000
MODULES = main.rel menu.rel ip.rel lcd.rel tcp.rel udp.rel icmp.rel http.rel ethernet.rel arp.rel enc28j60.rel
 
%.rel: %.c
sdcc $(SDCCFLAGS) -c $<
 
#main.rel: main.c
# sdcc $(SDCCFLAGS) -c $<
 
all: main.hex
 
main.hex : $(MODULES)
sdcc $(SDCCFLAGS) $(ASLINKFLAGS) $(MODULES)
packihx main.ihx > turbo8051.hex
 
clean:
rm -f *.asm *.hex *.ihx *.lnk *.lst *.map *.rel *.rst *.sym *.mem
 
#
#
#
 
SHELL = /bin/sh
SDCCFLAGS = --model-large -I /home/dinesha/download/sdcc/device/include/mcs51 -I /home/dinesha/download/sdcc/device/include/ -L /home/dinesha/download/sdcc/device/lib/build/large --debug
ASLINKFLAGS = --code-loc 0x040 --data-loc 0x0000 --stack-loc 0x040 --xram-loc 0x0000
MODULES = main.rel menu.rel ip.rel lcd.rel tcp.rel udp.rel icmp.rel http.rel ethernet.rel arp.rel enc28j60.rel
 
%.rel: %.c
sdcc $(SDCCFLAGS) -c $<
 
#main.rel: main.c
# sdcc $(SDCCFLAGS) -c $<
 
all: webserver.hex
 
webserver.hex : $(MODULES)
sdcc $(SDCCFLAGS) $(ASLINKFLAGS) $(MODULES)
packihx main.ihx > webserver.hex
 
clean:
rm -f *.asm *.hex *.ihx *.lnk *.lst *.map *.rel *.rst *.sym *.mem
 
/turbo8051/trunk/apps/webserver/icmp.h
44,7 → 44,7
// Prototype function
//
//********************************************************************************************
extern BYTE icmp_send_reply ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern void icmp_send_request ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern BYTE icmp_ping ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern BYTE icmp_send_reply ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern void icmp_send_request ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern BYTE icmp_ping ( BYTE *rx_buffer, BYTE **tx_buffer, BYTE *dest_mac, BYTE *dest_ip );
extern void _delay_ms( int iDelay );
/turbo8051/trunk/apps/webserver/udp.h
39,7 → 39,7
#define UDP_DATA_P 0x2A
 
extern void udp_generate_header ( BYTE *rxtx_buffer, WORD dest_port, WORD length );
extern WORD udp_puts_data ( BYTE *rxtx_buffer, BYTE *data, WORD offset );
extern WORD udp_puts_data ( BYTE *rxtx_buffer, BYTE *datap, WORD offset );
// Need to find out alternative method for 8051 access constant from Program memory - Dinesh.A
//extern WORD udp_puts_data_p ( BYTE *rxtx_buffer, PGM_P data, WORD offset );
extern BYTE udp_receive ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip );
/turbo8051/trunk/verif/model/oc8051_xram.v
84,7 → 84,7
reg ackw, ackr;
reg [31:0] data_out;
reg [2:0] cnt;
 
integer i;
//
// buffer
reg [7:0] buff [65535:0]; //64kb
93,6 → 93,14
assign ack = ackw || ackr;
 
 
// Intialise the memory
 
initial
begin
for (i=0; i<65536; i=i+1)
buff [i] = 8'h00;
end
 
//
// writing to ram
always @(posedge clk or posedge rst)
/turbo8051/trunk/verif/agents/ethernet/tb_eth_conf.v
14,7 → 14,7
 
`define MAX_PKT_SIZE 8000 // Max packet size in bytes
 
`define MAX_HEADER_SIZE 32 // Max size of user-defined packet headers
`define MAX_HEADER_SIZE 42 // Max size of user-defined packet headers
// (in bytes)
`define IP_EXTENSION_HEADER_SIZE 256 // Max size of IP Extension Header
 
/turbo8051/trunk/verif/run/filelist_rtl.f
44,6 → 44,10
//-------------------------------------
$TURBO8051_PROJ/rtl/clkgen/clkgen.v
$TURBO8051_PROJ/rtl/lib/clk_ctl.v
 
//------------------------------------
// Core Level Files
//-----------------------------------
$TURBO8051_PROJ/rtl/lib/wb_crossbar.v
$TURBO8051_PROJ/rtl/lib/wb_rd_mem2mem.v
$TURBO8051_PROJ/rtl/lib/wb_wr_mem2mem.v
/turbo8051/trunk/verif/run/dat/oc8051_xrom.in
1,257 → 1,248
02
00
08
12
00
64
80
FE
75
81
07
12
00
E3
E5
82
60
03
02
00
03
79
00
E9
44
00
60
1B
7A
00
90
00
E7
78
00
75
A0
08
E4
93
F2
A3
08
B8
00
02
05
A0
D9
F4
DA
F2
75
A0
FF
E4
78
FF
F6
D8
FD
78
00
E8
44
00
60
0A
79
00
75
A0
00
E4
F3
09
D8
FC
78
00
E8
44
08
60
0C
79
08
90
00
00
E4
F0
A3
D8
FC
D9
FA
02
00
03
90
00
00
74
01
F0
7A
01
7B
00
74
F8
2B
40
2A
EA
24
00
FC
EB
34
00
FD
EA
24
FF
FE
EB
34
FF
FF
EE
24
00
F5
82
EF
34
00
F5
83
E0
FE
0E
8C
82
8D
83
EE
F0
0A
BA
00
D4
0B
80
D1
7A
00
7B
00
7C
00
74
F8
2C
40
29
EB
24
00
F5
82
EC
34
00
F5
83
E0
FD
74
01
2B
FE
E4
3C
E4
FF
F8
ED
B5
06
06
E8
B5
07
02
80
03
0A
8A
80
0B
BB
00
D5
0C
80
D2
EA
60
07
75
A0
55
8A
B0
80
06
75
A0
AA
75
B0
AA
80
FE
75
82
00
22
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
FF
///
/// created by oc8051 rom maker
/// author: Simon Teran (simont@opencores.org)
///
/// source file: D:\gmac_loopback.hex
/// date: 5/6/2011
/// time: 4:47:40 PM
///
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
02
00
18
12
00
74
80
FE
75
81
31
12
00
EC
E5
82
60
03
02
00
13
79
00
E9
44
00
60
1B
7A
00
90
00
F0
78
07
75
A0
00
E4
93
F2
A3
08
B8
00
02
05
A0
D9
F4
DA
F2
75
A0
FF
E4
78
FF
F6
D8
FD
78
00
E8
44
00
60
0A
79
00
75
A0
00
E4
F3
09
D8
FC
78
07
E8
44
00
60
0C
79
01
90
00
00
E4
F0
A3
D8
FC
D9
FA
02
00
13
90
00
05
E4
F0
A3
F0
E4
F5
30
F5
31
90
A0
30
E0
FC
A3
E0
FD
EC
54
0F
60
F3
90
00
05
E0
FC
A3
E0
FD
8C
06
74
70
4D
FF
90
00
01
EE
F0
A3
EF
F0
74
40
4C
F8
74
70
4D
F9
90
00
03
E8
F0
A3
E9
F0
8E
82
8F
83
E0
FE
A3
E0
FF
A3
E0
FA
A3
E0
FB
88
82
89
83
EE
F0
A3
EF
F0
A3
EA
F0
A3
EB
F0
74
04
2C
FC
E4
3D
FD
90
00
05
74
3F
5C
F0
A3
E4
F0
05
30
E4
B5
30
98
05
31
80
94
75
82
00
22
/turbo8051/trunk/verif/tb/tb_top.v
411,6 → 411,8
// test case, which has control before reset
if ( $test$plusargs("gmac_test_2") )
gmac_test2();
else if ( $test$plusargs("webserver") )
webserver();
 
#1000 wait(reset_out_n == 1);
 
421,7 → 423,8
uart_test1();
else if ( $test$plusargs("spi_test_1") )
spi_test1();
else if ( !$test$plusargs("gmac_test_2") ) begin
else if ( !$test$plusargs("gmac_test_2") &&
!$test$plusargs("webserver")) begin
// 8051 Test Cases
#80000000
$display("time ",$time, "\n faulire: end of time\n \n");
457,6 → 460,7
 
`include "gmac_test1.v"
`include "gmac_test2.v"
`include "webserver.v"
`include "uart_test1.v"
`include "spi_test1.v"
`include "tb_tasks.v"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.