ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
9548 Топик полностью
Джордано Бруно (17.04.2004 21:27, просмотров: 1) ответил - на Всё же socket.c рулит.
Я понимаю, что 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); }*/