Я понимаю, что socket.c рулит... и скорее всего, придется его переписать под свою задачу. Но слепо использовать чужую библиотеку я не хочу, "это же не наш метод".
К тому же результат требуется здесь и сейчас, хоть какой , но результат.
Вот код моей программы. Запихал все в main.c
#include
#include
volatile unsigned int BASEW3100=0x0d0f00000; // определение базового адреса для адресного пространства W3100
volatile unsigned int CONST_COEF=0x04;//
volatile unsigned int BASE_DIOD=0xd0000000; // определение базового адреса для адресов диодов. 05.03.04 Яковлев А.С.
volatile unsigned int i, j, k, fr;
//void dela yNet () ;
void delay(long int);
void L_ON() //включение зеленого левого светодиода 05.03.04 , 03-04-04
{
// volatile unsigned int BASE_DIOD=0xd0000000;
*(volatile unsigned int*)( BASE_DIOD )=0x0201;
}
void R_ON() //включение красного правого светодиода 05.03.04 , 03-04-04
{
*(volatile unsigned int*)( BASE_DIOD ) =0x0202;
}
void LEDS_ON()//включение всех диодов 05.03.04 , 03-04-04
{
*(volatile unsigned int*)( BASE_DIOD ) =0x02FF;
;
}
void LEDS_OFF()//выключение всех диодов (инициализация) 05.03.04 , 03-04-04
{
*(volatile unsigned int*)( BASE_DIOD ) =0x0200;
;
}
void __irq IRQ_Handler (void)
{
}
/*=========================================================================================
= Блок функций для конфигурирования регистров микросхемы W3100A. =
=========================================================================================*/
void Set_UDP() // функция записи в регистр С0_SOPR 0x02 - активизация протокола UDP
{
*(volatile unsigned int*)( BASEW3100 + 0x02 * CONST_COEF ) =0x012;
}
void Set_ADR() // функция установки сетевых адресов источника и назначения
{
//установка регистра GAR:(0x080-0x083) шлюз 169.253.184.1
*(volatile unsigned int*)( BASEW3100 + 0x080 * CONST_COEF ) = 0x0A9 ;
*(volatile unsigned int*)( BASEW3100 + 0x081 * CONST_COEF ) = 0x0FD ;
*(volatile unsigned int*)( BASEW3100 + 0x082 * CONST_COEF ) = 0x0A8 ;
*(volatile unsigned int*)( BASEW3100 + 0x083 * CONST_COEF ) = 0x01 ;
//установка регистра SMR:(0x084-0x087) маска подсети 255.255.255.0 ??????
*(volatile unsigned int*)( BASEW3100 + 0x084 * CONST_COEF ) = 0x0FF ;
*(volatile unsigned int*)( BASEW3100 + 0x085 * CONST_COEF ) = 0x0FF ;
*(volatile unsigned int*)( BASEW3100 + 0x086 * CONST_COEF ) = 0x0FF ;
*(volatile unsigned int*)( BASEW3100 + 0x087 * CONST_COEF ) = 0 ;
//установка регистра SHAR:(0x088-0x08d) МАК-адрес источника
*(volatile unsigned int*)( BASEW3100 + 0x088 * CONST_COEF ) = 0x00FF ;
*(volatile unsigned int*)( BASEW3100 + 0x089 * CONST_COEF ) = 0x00FF ;
*(volatile unsigned int*)( BASEW3100 + 0x08a * CONST_COEF ) = 0x00FF ;
*(volatile unsigned int*)( BASEW3100 + 0x08b * CONST_COEF ) = 0x00FF ;
*(volatile unsigned int*)( BASEW3100 + 0x08c * CONST_COEF ) = 0x00FF ;
*(volatile unsigned int*)( BASEW3100 + 0x08d * CONST_COEF ) = 0x00FF ;
//установка регистра SIPR:(0x08e-0x091) IP адрес источника 169.253.168.28
*(volatile unsigned int*)( BASEW3100 + 0x08e * CONST_COEF ) = 0x0A9;
*(volatile unsigned int*)( BASEW3100 + 0x08f * CONST_COEF ) = 0x0FD;
*(volatile unsigned int*)( BASEW3100 + 0x090 * CONST_COEF ) = 0x0A8;
*(volatile unsigned int*)( BASEW3100 + 0x091 * CONST_COEF ) = 0x01C;
}
void Set_MEM () // функция установки регистров памяти
{
// установка регистра TMSR:(0x096) разбиение памяти передачи по каналам
*(volatile unsigned int*)( BASEW3100 + 0x096 * CONST_COEF ) = 0x0003 ; // все на нулевой канал
// установка регистра С0_TW_PR:(0x040-0x043) указатель конечной точки передачи данных
*(volatile unsigned int*)( BASEW3100 + 0x040 * CONST_COEF ) = 0x0000 ;
*(volatile unsigned int*)( BASEW3100 + 0x041 * CONST_COEF ) = 0x0010 ;
*(volatile unsigned int*)( BASEW3100 + 0x042 * CONST_COEF ) = 0x000 ;
*(volatile unsigned int*)( BASEW3100 + 0x043 * CONST_COEF ) = 0x000 ;
// установка регистра С0_TA_PR:(0x018-0x01B) указатель конечной точки передачи данных
*(volatile unsigned int*)( BASEW3100 + 0x018 * CONST_COEF ) = 0x0010 ;
*(volatile unsigned int*)( BASEW3100 + 0x019 * CONST_COEF ) = 0x0040 ;
*(volatile unsigned int*)( BASEW3100 + 0x01A * CONST_COEF ) = 0x000 ;
*(volatile unsigned int*)( BASEW3100 + 0x01B * CONST_COEF ) = 0x000 ;
// установка регистра С0_TW_PR:(0x044-0x047) указатель начальной точки передачи данных
*(volatile unsigned int*)( BASEW3100 + 0x044 * CONST_COEF ) = 0x000 ;
*(volatile unsigned int*)( BASEW3100 + 0x045 * CONST_COEF ) = 0x040 ;
*(volatile unsigned int*)( BASEW3100 + 0x046 * CONST_COEF ) = 0x000 ;
*(volatile unsigned int*)( BASEW3100 + 0x047 * CONST_COEF ) = 0x000 ;
}
void DOWNLOAD_MEM() // подготовка данных к передаче
{
// заливка пятерок в памяти для передачи
volatile unsigned int ih;
for ( ih=0x04000; ih<0x06000; ih++ )
{
//delay (20);
*(volatile unsigned int*)( BASEW3100 + ih * CONST_COEF ) = 0x0055;
}
//delay (20);
}
void Set_IMR() // установка регистра прерываний IMR микросхемы W3100
{
*(volatile unsigned int*)( BASEW3100 + 0x09 * CONST_COEF ) = 0x00FF ;
//delay (20);
}
void Set_IR() // установка регистра прерываний IMR микросхемы W3100
{
*(volatile unsigned int*)( BASEW3100 + 0x08 * CONST_COEF ) = 0x00FF ;
//delay (20);
}
void Sys_Init_C0 () // команда для установки ИП адреса, Маски подсети , МАК адреса, ИП адреса приемника
{
*(volatile unsigned int*)( BASEW3100 + 0x00 * CONST_COEF ) = 0x01 ;
//delay (20);
}
void Sock_Init_C0 () // команда для установки переающего протокола С0 и открывания канала С0
{
*(volatile unsigned int*)( BASEW3100 + 0x00 * CONST_COEF ) |= 0x02 ;
//delay (20);
}
void Send_C0 () // команда для передачи данных по каналу С0
{
*(volatile unsigned int*)( BASEW3100 + 0x00 * CONST_COEF ) |= 0x020 ;
//delay (20);
}
/*======================================================================================
= Конец блока функций для конфигурирования регистров микросхемы W3100A =
======================================================================================*/
int main ()
{
volatile unsigned int d, sr;
int temp;
// volatile unsigned int i, j, k;
/*-------------*/
// *(unsigned int*)TIMER0_LOADB1EG = 32000; // настройка на счет до 1 мс
// *(unsigned int*)TIMER0_CONTROLB1EG = 0xC0; // старт счета таймера
// *(unsigned int*)MSS_CS1_CONFIGB1EG = 0x02;
// *(unsigned int*)PU_PROTECTION_AREAB1EG = 0x03f;
*(unsigned int*)INT_IRQ_ENABLE_CLEAR_REG = 0x0ffff; // запрещаем
/*-------------*/
/* *(unsigned int*)PU_AREA_DEF0B1EG = 0x02f;
*(unsigned int*)PU_AREA_DEF1B1EG = 0x02f;
*(unsigned int*)PU_AREA_DEF2B1EG = 0x02f;
*(unsigned int*)PU_AREA_DEF3B1EG = 0x02f;
*(unsigned int*)PU_AREA_DEF4B1EG = 0x02f;
*(unsigned int*)PU_AREA_DEF5B1EG = 0x02f;
*(unsigned int*)PU_AREA_DEF6B1EG = 0x02f;
*(unsigned int*)PU_AREA_DEF7B1EG = 0x02f;
temp = *(volatile unsigned char * )CommandReg;
if( temp & 0x01)
temp &= 0xFE;
else
temp |= 0x01;
*(volatile unsigned char * ) CommandReg = temp;*/
/*-------------
*(unsigned int*)MSS_CS1_CONFIGB1EG = 0x02;
*(unsigned int*)INT_IRQ_ENABLE_CLEARB1EG = 0x08; // запрещаем
*(unsigned int*)REMAP_SRAM_BASE_ADRB1EG = 0xd0000000;
*(unsigned int*)PU_PROTECTION_AREAB1EG = 0x03f;
------------- */
// *(unsigned int*)PU_AREA_DEF0B1EG = 0x02f;
// *(unsigned int*)PU_AREA_DEF1B1EG = 0x02f;
// *(unsigned int*)PU_AREA_DEF2B1EG = 0x02f;
// *(unsigned int*)PU_AREA_DEF3B1EG = 0x02f;
// *(unsigned int*)PU_AREA_DEF4B1EG = 0x02f;
// *(unsigned int*)PU_AREA_DEF5B1EG = 0x02f;
// *(unsigned int*)PU_AREA_DEF6B1EG = 0x02f;
// *(unsigned int*)PU_AREA_DEF7B1EG = 0x02f;
//L_ON();
//delay (1000000);
// *(volatile unsigned int*)( 0x0d0000000) = 0x200; // блокировка ПЗУ
for (fr=1; fr<10; fr++) // просто мигание диодами
{
L_ON ();
delay (40000);
R_ON ();
delay (40000);//500000
LEDS_OFF ();
delay (40000);//500000
};
*(volatile unsigned int*)( 0x0d0000000) = 0x200; // блокировка ПЗУ
Set_ADR ();
Set_UDP ();
Sys_Init_C0 ();
for (;;)//
}// end of main
void delay(long int t)
{
long int iii;
for ( iii =0; iii < t; iii++)
{
__asm
{
mov r0, r0 // NOP/
mov r0, r0
mov r0, r0
mov r0, r0 // NOP
}
}
}
/*void delayNet ()
{
////delay (20);
}*/
-
- MAC адрес широковещательный у вас! -(172 знак., 19.04.2004 10:11, ссылка)
- Мак адрес уже изменил Джордано Бруно(547 знак., 19.04.2004 19:26)
- MAC адрес широковещательный у вас! -(172 знак., 19.04.2004 10:11, ссылка)