meister 0 15 декабря, 2008 Опубликовано 15 декабря, 2008 · Жалоба Подскажите пожалуйста, где можно посмотреть полную инициализацию езернета (хотя бы MAC) для LPC236x. Тут при выполнении последней строчки (инструкции STR) отладчик пишет "Unable to halt chip (expecting nMREQ =1, DBGACK =1), found nMREQ =0, DBGACK=0" MAC1 = (1u << 8) | (1u << 9) | (1u << 10) | (1u << 11) | (1u << 14) | (1u << 15); COMMAND = (1u << 3) | (1u << 4) | (1u << 5); OS::Sleep(1); // 250 микросекунд MAC1 = (1u << 1); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 15 декабря, 2008 Опубликовано 15 декабря, 2008 · Жалоба Подскажите.. Moderator: Просьба думать, перед выбором темы и не засорять чужие ветки... //--------------------------------------------------------------------------- // Initializes the EMAC Ethernet Controller //--------------------------------------------------------------------------- int init_emac(void) { ulong tout; // Select the PHY/RMII functions Pins #if defined __IOLPC2458_H #if EMAC_CFG_RMII // Configure I/O and the RMII / MII interface pins // RMII or MII tout = PINSEL2 & 0x0FC0FCF0; PINSEL2 = tout | 0x50150105; tout = PINSEL3 & 0x0000000F; PINSEL3 = tout | 0x00000005; #else PINSEL2 = 0x55555555; // Selects P1[15:0] tout = PINSEL3 & 0x0000000F; PINSEL3 = tout | 0x00000005; #endif #endif #if defined __IOLPC2378_H FIO4SET |= (P4B_RES_PHY|P4B_PDOWN_PHY); FIO4DIR |= (P4B_RES_PHY|P4B_PDOWN_PHY); // RMII only #if( NEW_SILICON ) tout = PINSEL2 & 0x0FC0FCF0; PINSEL2 = tout | 0x50150105; // Selects P1[0,1,4,8,9,10,14,15] #else tout = PINSEL2 & 0x0FC0CCF0; PINSEL2 = tout | 0x50151105; // Selects P1[0,1,4,6,8,9,10,14,15] (errata work-around) #endif tout = PINSEL3 & 0x0000000F; PINSEL3 = tout | 0x00000005; #endif // Power Up the EMAC controller PCONP |= PCONP_PCENET; vSmartDelay_ms( 2 ); reset_emac(); if( init_phy() ) return( 1 ); install_irq( VIC_ETHERNET, (void *)eth_isr_handler, VIC_ETH_PRIOR, TRUE ); // Clear all interrupts MINTCLEAR = ( INT_RX_OVERRUN | INT_RX_ERROR | INT_RX_FINISHED | INT_RX_DONE | INT_TX_UNDERRUN | INT_TX_ERROR | INT_TX_FINISHED | INT_TX_DONE | INT_SOFT_TRIGG | INT_WAKEUP ); // Enable EMAC interrupts MINTENABLE = ( INT_RX_OVERRUN | INT_RX_DONE | INT_TX_UNDERRUN | INT_TX_ERROR | INT_TX_DONE ); // Enable receive and transmit mode of MAC Ethernet core MCOMMAND |= (CR_RX_ENABLE|CR_TX_ENABLE); MAC1 = (MAC1 & MAC1_MASK)|MAC1_RX_ENABLE; return( 0 ); } //--------------------------------------------------------------------------- // Resets the chip and leaves it in an idle state //--------------------------------------------------------------------------- int reset_emac(void) { // Reset all EMAC internal modules. MAC1 = MAC1_RES_TX|MAC1_RES_MCS_TX|MAC1_RES_RX|MAC1_RES_MCS_RX| MAC1_SIM_RESET|MAC1_SOFT_RESET; // Reset all datapaths and the host registers MCOMMAND = CR_REG_RESET|CR_TX_RESET|CR_RX_RESET; MAC2 = MAC2_CRC_ENABLE|MAC2_PAD_ENABLE|MAC2_ADET_PAD_ENABLE; IPGT = IPGT_HALF_DUPLEX; IPGR = IPGR_DEF; // Collission Windows Retry register (default value) CLRT = CLRT_DEF; // Set the Non Back to Back Inter Pkt Gap to recm'd value MAXF = ETH_MAX_FLEN; // Accept maximum sized frames // Set the Ethernet MAC Address registers SA2 = mymac.sa2; SA1 = mymac.sa1; SA0 = mymac.sa0; MAC1 = 0; // Deassert all prior resets // Initialize Tx and Rx DMA Descriptors rx_descr_init(); tx_descr_init(); RXFILTERCTRL = RFC_BCAST_EN|RFC_PERFECT_EN; // Accept Broadcast and Perfect Address frames return( 0 ); } Но не думаю, что Вам это поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
meister 0 16 декабря, 2008 Опубликовано 16 декабря, 2008 · Жалоба Но не думаю, что Вам это поможет. Да, все так же плохо. После записи 3, 4 или 5 битов в COMMAND на следующей записи в любой регистр MAC все ломается. Если такие биты не записывать - программа продолжает работать. Это может быть связано с тем, что у меня PHY и генератор REF_CLK не запаяны? MAC_and_PHY_power(true); configure_pins_as_GPIO(); set_strapin_values(settings); __no_operation(); __no_operation(); __no_operation(); __no_operation(); hw::GPIO::eth_PHY::start(true); OS::Sleep(1 + util::microseconds2ttimeout(pcb::Ethernet_PHY_startup_time_mcs)); configure_pins_as_ethernet(); MAC1 = util::bit<MAC1_reset_tx>::value | util::bit<MAC1_reset_mcs_tx>::value | util::bit<MAC1_reset_rx>::value | util::bit<MAC1_reset_mcs_rx>::value | util::bit<MAC1_simulation_reset>::value | util::bit<MAC1_soft_reset>::value; __no_operation(); COMMAND = /*util::bit<COMMAND_tx_reset>::value | util::bit<COMMAND_rx_reset>::value | util::bit<COMMAND_reg_reset>::value |*/ util::bit<COMMAND_RMII>::value; __no_operation(); MAC2 = util::bit<MAC2_frame_length_checking>::value | util::bit<MAC2_crc_enable>::value | util::bit<MAC2_pad_crc_enable>::value | util::bit<MAC2_auto_detect_pad_enable>::value; __no_operation(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lebiga 0 16 декабря, 2008 Опубликовано 16 декабря, 2008 · Жалоба Да, все так же плохо. После записи 3, 4 или 5 битов в COMMAND на следующей записи в любой регистр MAC все ломается. Если такие биты не записывать - программа продолжает работать. Это может быть связано с тем, что у меня PHY и генератор REF_CLK не запаяны? Да, это из-за отсутствия частоты на REF_CLK процессора, я когда-то во время эксперимента оторвал тактовую - и после записи COMMAND был постоянно срыв отладки. Да и без PHY лучше не обращаться к EMAC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
meister 0 16 декабря, 2008 Опубликовано 16 декабря, 2008 · Жалоба Да, это из-за отсутствия частоты на REF_CLK процессора, я когда-то во время эксперимента оторвал тактовую - и после записи COMMAND был постоянно срыв отладки. Да и без PHY лучше не обращаться к EMAC А диагностика? Если оторвать EEPROM (запаять не так, не пропаять, поставить поврежденный) мой прибор пустится и скажет, что "EEPROM не работает". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lebiga 0 16 декабря, 2008 Опубликовано 16 декабря, 2008 · Жалоба А диагностика? Если оторвать EEPROM (запаять не так, не пропаять, поставить поврежденный) мой прибор пустится и скажет, что "EEPROM не работает". Диагностику обращением к регистрам EMAC без тактовой частоты сделать не получится - ограничение аппаратное Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться