- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
So I successfully developed my code on the DE2 board to working, essentially it's a variation on BTXSistemas' DE2_Net to introduce some randomization and other features. However I now need to implement it on the DE2-115 which has a much different Ethernet core. I'm trying to use the Web Server example as a starting point but it's so much higher level than I really need that I'm getting nowhere. Basically what I need is to figure out the equivalent function of
TransmitPacket(TXT,Length) on the DE2-115. Can anyone help me out here? Thanks in advance and I've included my main code below.#include "alt_types.h" // alt_u32
# include "altera_avalon_pio_regs.h" //IOWR_ALTERA_AVALON_PIO_DATA
# include "sys/alt_irq.h" // interrupt
# include <stddef.h>
# include "sys/alt_flash.h"
# include "sys/alt_flash_types.h"
# include "sys/alt_alarm.h" // time tick function (alt_nticks(), alt_ticks_per_second())
# include "sys/alt_timestamp.h"
# include "sys/alt_stdio.h"
# include <fcntl.h>
# include "nios2_ctrl_reg_macros.h"
# include <io.h>
# include <stdio.h>
# include <unistd.h>
# include <stdlib.h>
# include <string.h>
# include "LCD.h"
# include "system.h"
# include "DM9000A.C"
# include "hello_led.h"
# include "test.h"
unsigned int aaa,rx_len,i,packet_num, times, counter;
unsigned char RXT;
unsigned char SND; // Payload buffer
unsigned int IPsource_1,IPsource_2,IPsource_3,IPsource_4;
unsigned int IPdestination_1,IPdestination_2,IPdestination_3,IPdestination_4;
unsigned int IPchecksum1,IPchecksum2,IPchecksum3,IPchecksum4,IPchecksum5;
unsigned int Mac_source1, Mac_source2, Mac_source3, Mac_source4, Mac_source5, Mac_source6;
unsigned int Mac_dest1, Mac_dest2, Mac_dest3, Mac_dest4, Mac_dest5, Mac_dest6;
unsigned int times, lenght_h, lenght_l;
unsigned int flenght, IPlenght_h, IPlenght_l, data_lenght, IPlenght;
unsigned int delay, Mode;
int data0, data1, data2, data3, data4, data5, data6, data7;
int main(void)
{
LCD_Test();
IPsource_1 = 0xC0; // Assign ie: 192.168.0.44 IP for the DE2
IPsource_2 = 0xA8;
IPsource_3 = 0x00;
IPsource_4 = 0x2C;
IPdestination_1 = 0x??; // Insert your IP data here
IPdestination_2 = 0x??;
IPdestination_3 = 0x??;
IPdestination_4 = 0x??;
Mac_dest1 = 0x00; // Insert your MAC address data here
Mac_dest2 = 0x03;
Mac_dest3 = 0x25;
Mac_dest4 = 0x43;
Mac_dest5 = 0x6A;
Mac_dest6 = 0x27;
Mac_source1 = 0x01; // Assign a MAC address for DE2
Mac_source2 = 0x60;
Mac_source3 = 0x6E;
Mac_source4 = 0x11;
Mac_source5 = 0x02;
Mac_source6 = 0x0F;
delay = 0;
Mode = 0;
data_lenght = 1468; // Maximun Data lenght 1468 bytes
flenght = data_lenght + 0x2E; //Total packet lenght
lenght_h = ((data_lenght+8) & 0xFF00)>>8; // Convert in H byte and L byte
lenght_l = ((data_lenght+8) & 0x00FF);
IPlenght = data_lenght + 8 + 20; // IP Lenght for IP header
IPlenght_h = (IPlenght & 0xFF00)>>8; // Convert in H byte and L byte
IPlenght_l = (IPlenght & 0x00FF);
// Calculating the IP checksum
IPchecksum1 = 0x0000C511 + (IPsource_1<<8)+IPsource_2+(IPsource_3<<8)+IPsource_4+
(IPdestination_1<<8)+IPdestination_2+(IPdestination_3<<8)+(IPdestination_4)+
(IPlenght_h<<8) + IPlenght_l;
IPchecksum2 = ((IPchecksum1&0x0000FFFF)+(IPchecksum1>>16));
IPchecksum3 = 0x0000FFFF - IPchecksum2;
IPchecksum4 = (IPchecksum3 & 0xFF00)>>8;
IPchecksum5 = (IPchecksum3 & 0x00FF);
srand ( time(NULL) );
unsigned char TXT = { Mac_dest1,Mac_dest2,Mac_dest3,Mac_dest4,Mac_dest5,Mac_dest6, //Destination MAC
Mac_source1,Mac_source2,Mac_source3,Mac_source4,Mac_source5,Mac_source6, //Source MAC
0x08,0x00, //Type
0xFF, // Header Length
0x22, //ECN-CE
0x33,0x44, //total Length
0x55,0x66, //Identification
0x77,0x88, //Fragment Offset
0x99, //Time to Live
0xAA, //Protocol
0x55,0x66, //Checksum
IPsource_1,IPsource_2,IPsource_3,IPsource_4, //Source IP
//0x77,0x88,0x99,0xAA, //Source IP
IPdestination_1,IPdestination_2,IPdestination_3,IPdestination_4, //Destination IP
0x99,0xAA,0x55,0x66,0x77,0x88, //Data
0x55,0x66,0x77,0x88,0x99,0xAA, //Data
0x55,0x66,0x77,0x88,0x99,0xAA, //Data
0x55,0x66,0x77,0x88,0x99,0xAA, //Data
0x00,0x00,0x00,0x20,0x99,0xAA}; //Data
unsigned char TXT2 = { Mac_dest1, Mac_dest2, Mac_dest3, Mac_dest4 ,Mac_dest5, Mac_dest6,
Mac_source1, Mac_source2, Mac_source3, Mac_source4, Mac_source5, Mac_source6,
0x08, 0x00, 0xFF, 0x22, IPlenght_h, IPlenght_l,
0x55, 0x66, 0x77, 0x88, 0x99, 0xAA,
IPchecksum4, IPchecksum5, IPsource_1, IPsource_2, IPsource_3, IPsource_4,
IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4, 0x04, 0x00,
0x04, 0x00, lenght_h, lenght_l, 0x00, 0x00};
for (i = 0; i < 42; i++) // Load the TXT in the SND (ethernet packet).
SND = TXT2;
for (i = 42; i < flenght-4; i++) // generating the data to send.
SND = i-42;
SND = 0x35; // This checksum is not correct, but also the net recieve the packets correctly.
SND = 0x15; // To do, calculate checksum.
SND = 0xF0;
SND = 0x13;
DM9000_init();
init_button_irq();
LCD_TestSWNR();
//Add ability to change data rates
//Modes, send out data at 34 Mbit/s, send data out in bursts, storing in RAM until full
//How to get MAC/IP of other INK Board/s and hard code in or software get
while (1)
{
alt_u8 button;
button = IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE);
bool bSpeedDown, bSpeedUp, bMode;
if(button & 0x08)
bSpeedDown = FALSE;
else{
LCD_TestDS();
delay += 100;
msleep(1000);
}
if(button & 0x04)
bSpeedUp = FALSE;
else{
if(delay != 0){
LCD_TestIS();
delay -= 100;
}
else
LCD_TestMax();
msleep(1000);
}
if(button & 0x02)
bMode = FALSE;
else{
Mode++;
delay = 0;
if(Mode == 0)
LCD_TestSWNR();
else if(Mode == 1)
LCD_TestSWR();
else if(Mode == 2)
LCD_TestHWPR();
else if(Mode == 3)
LCD_TestHWFR();
else if(Mode == 4)
LCD_TestP();
else{
Mode = 0;
LCD_TestSWNR();
}
msleep(1000);
}
if(Mode == 0){ //SW Not Random Data Generation
TransmitPacket(SND,flenght); // Send repetitively 1468 bytes of data.
times++;
}
else if(Mode == 1){ //SW Random Data Generation
for (i = 42; i < flenght-4; i++) // generating the data to send.
SND = rand() % 255;
TransmitPacket(SND,flenght); // Send repetitively 1468 bytes of data.
times++;
}
else if(Mode == 2){ //HW Repeating Packet Data
unsigned int data = IORD_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE);
data0 = data & 0x1;
data1 = data & 0x10;
data1 >>= 3;
data2 = data & 0x100;
data2 >>= 6;
data3 = data & 0x2000;
data3 >>= 10; //Should be 9
data4 = data & 0x20000;
data4 >>= 13; //Should be 12
data5 = data & 0x200000;
data5 >>= 16; //Should be 15
data6 = data & 0x1000000;
data6 >>= 18;
data7 = data & 0x10000000;
data7 >>= 21;
data = data0 | data1 | data2 | data3 | data4 | data5 | data6 | data7;
for (i = 42; i < flenght-4; i++) // generating the data to send.
SND = data;
TransmitPacket(SND,flenght); // Send repetitively 1468 bytes of data.
times++;
}
else if(Mode == 3){ //HW Completely Random
for(i=34; i < 64; i++){
unsigned int data = IORD_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE);
data0 = data & 0x1;
data1 = data & 0x10;
data1 >>= 3;
data2 = data & 0x100;
data2 >>= 6;
data3 = data & 0x2000;
data3 >>= 10; //Should be 9
data4 = data & 0x20000;
data4 >>= 13; //Should be 12
data5 = data & 0x200000;
data5 >>= 16; //Should be 15
data6 = data & 0x1000000;
data6 >>= 18;
data7 = data & 0x10000000;
data7 >>= 21;
data = data0 | data1 | data2 | data3 | data4 | data5 | data6 | data7;
TXT = data;
}
TransmitPacket(TXT,0x40);
times++;
}
else if(Mode == 4){ //Pause
msleep(10);}
IOWR(SEG7_DISPLAY_BASE, 0, times); // Show in hex digits the# of packets sent
usleep(delay);
}
return 0;
}
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi driscoll42,
did you get any result from this project. could you please tell us the out come if there is any.- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
No, sorry. I never got it working properly.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page