реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Инициализация MAC для LPC236x
meister
сообщение Dec 15 2008, 16:00
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Подскажите пожалуйста, где можно посмотреть полную инициализацию езернета (хотя бы 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);
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 15 2008, 17:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(meister @ Dec 15 2008, 19:00) *
Подскажите..

Moderator: Просьба думать, перед выбором темы и не засорять чужие ветки...

CODE

//---------------------------------------------------------------------------
// 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 );
}

Но не думаю, что Вам это поможет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
meister
сообщение Dec 16 2008, 09:19
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(zltigo @ Dec 15 2008, 21:41) *
Но не думаю, что Вам это поможет.


Да, все так же плохо. После записи 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();
Go to the top of the page
 
+Quote Post
lebiga
сообщение Dec 16 2008, 10:42
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292



Цитата(meister @ Dec 16 2008, 13:19) *
Да, все так же плохо. После записи 3, 4 или 5 битов в COMMAND на следующей записи в любой регистр MAC все ломается. Если такие биты не записывать - программа продолжает работать. Это может быть связано с тем, что у меня PHY и генератор REF_CLK не запаяны?


Да, это из-за отсутствия частоты на REF_CLK процессора, я когда-то во время эксперимента оторвал тактовую - и после записи COMMAND был постоянно срыв отладки. Да и без PHY лучше не обращаться к EMAC
Go to the top of the page
 
+Quote Post
meister
сообщение Dec 16 2008, 11:09
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(lebiga @ Dec 16 2008, 14:42) *
Да, это из-за отсутствия частоты на REF_CLK процессора, я когда-то во время эксперимента оторвал тактовую - и после записи COMMAND был постоянно срыв отладки. Да и без PHY лучше не обращаться к EMAC


А диагностика? Если оторвать EEPROM (запаять не так, не пропаять, поставить поврежденный) мой прибор пустится и скажет, что "EEPROM не работает".
Go to the top of the page
 
+Quote Post
lebiga
сообщение Dec 16 2008, 11:47
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292



Цитата(meister @ Dec 16 2008, 15:09) *
А диагностика? Если оторвать EEPROM (запаять не так, не пропаять, поставить поврежденный) мой прибор пустится и скажет, что "EEPROM не работает".

Диагностику обращением к регистрам EMAC без тактовой частоты сделать не получится - ограничение аппаратное
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 20:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016