Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-ноя-14 07:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Ethernet или не он
СообщениеДобавлено: 2017-дек-27 08:40 
Не в сети

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 26
Использую код
Код:
#define MAC_5            0xC8
#define MAC_4            0x60
#define MAC_3            0x00
#define MAC_2            0x67
#define MAC_1            0xB1
#define MAC_0            0x6D

static PORT_InitTypeDef PORT_InitStructure;
static ETH_InitTypeDef  ETH_InitStruct;

void ClockConfigure ( void )
{
   /* Enable HSE (High Speed External) clock */
   RST_CLK_HSEconfig(RST_CLK_HSE_ON);
   if (RST_CLK_HSEstatus() == ERROR) {
      while (1);
   }

   /* Configures the CPU_PLL clock source */
   RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul16);

   /* Enables the CPU_PLL */
   RST_CLK_CPU_PLLcmd(ENABLE);
   if (RST_CLK_CPU_PLLstatus() == ERROR) {
      while (1);
   }

   /* Enables the RST_CLK_PCLK_EEPROM */
   RST_CLK_PCLKcmd(RST_CLK_PCLK_EEPROM, ENABLE);
   /* Sets the code latency value */
   EEPROM_SetLatency(EEPROM_Latency_5);

   /* Select the CPU_PLL output as input for CPU_C3_SEL */
   RST_CLK_CPU_PLLuse(ENABLE);
   /* Set CPUClk Prescaler */
   RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);

   /* Select the CPU clock source */
   RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
}

void ETH_InputPachetHandler(MDR_ETHERNET_TypeDef * ETHERNETx){

}


void eth_init(void) {
   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);
   /* Reset PORTB settings */
   PORT_DeInit(MDR_PORTB);

   /* LEDs Port Init */
   /* Configure PORTB pins 2,3,4,5,6,7 */
   PORT_InitStructure.PORT_Pin = ( PORT_Pin_2 | PORT_Pin_3 | PORT_Pin_4 |
                            PORT_Pin_5 | PORT_Pin_6 | PORT_Pin_7 );
   PORT_InitStructure.PORT_MODE    = PORT_MODE_DIGITAL;
   PORT_InitStructure.PORT_OE     = PORT_OE_OUT;
   PORT_InitStructure.PORT_SPEED    = PORT_SPEED_MAXFAST;
   PORT_InitStructure.PORT_FUNC    = PORT_FUNC_PORT;
   PORT_InitStructure.PORT_PD       = PORT_PD_DRIVER;
   PORT_Init(MDR_PORTB, &PORT_InitStructure);

//   DEBUG_PRINTF("Init LEDs PORT ... Ok\r\n");

   /* Reset ehernet clock settings */
   ETH_ClockDeInit();

   RST_CLK_PCLKcmd(RST_CLK_PCLK_DMA, ENABLE);

   /* Enable HSE2 oscillator */
   RST_CLK_HSE2config(RST_CLK_HSE2_Bypass);
   if(RST_CLK_HSE2status() == ERROR)
      while(1); /* Infinite loop */

   /* Config PHY clock */
   ETH_PHY_ClockConfig(ETH_PHY_CLOCK_SOURCE_HSE2, ETH_PHY_HCLKdiv1);

   /* Init the BRG ETHERNET */
   ETH_BRGInit(ETH_HCLKdiv1);

   /* Enable the ETHERNET clock */
   ETH_ClockCMD(ETH_CLK1, ENABLE);

   /* Reset to default ethernet settings */
   ETH_DeInit(MDR_ETHERNET1);

   /* Init ETH_InitStruct members with its default value */
   ETH_StructInit((ETH_InitTypeDef * ) &ETH_InitStruct);
   /* Set the speed of the chennel */
   ETH_InitStruct.ETH_PHY_Mode = ETH_PHY_MODE_AutoNegotiation;
   ETH_InitStruct.ETH_Transmitter_RST = SET;
   ETH_InitStruct.ETH_Receiver_RST = SET;
   /* Set the buffer mode */
   ETH_InitStruct.ETH_Buffer_Mode = ETH_BUFFER_MODE_LINEAR;

   ETH_InitStruct.ETH_Source_Addr_HASH_Filter = DISABLE;

   /* Set the MAC address. */
   ETH_InitStruct.ETH_MAC_Address[2] = (MAC_0<<8)|MAC_1;
   ETH_InitStruct.ETH_MAC_Address[1] = (MAC_2<<8)|MAC_3;
   ETH_InitStruct.ETH_MAC_Address[0] = (MAC_4<<8)|MAC_5;

   /* Set the buffer size of transmitter and receiver */
   ETH_InitStruct.ETH_Dilimiter = 0x1000;

   /* Init the ETHERNET 1 */
   ETH_Init(MDR_ETHERNET1, (ETH_InitTypeDef *) &ETH_InitStruct);

   /* Enable PHY module */
   ETH_PHYCmd(MDR_ETHERNET1, ENABLE);

   //TCPLowLevelInit();

   /* Start the ETHERNET1 */
   ETH_Start(MDR_ETHERNET1);
}

int main ( void ) {
   ClockConfigure();
   eth_init();
   while(1) {
      __NOP;
   }
}

Иногда код стопорится на if(RST_CLK_HSE2status() == ERROR)
Иногда проходит, но при этом вылетает HardFault после while, плюс после этого нельзя прошит мк, приходится дергать питанием
МК 1986BE1T 1140
Отладочная плата EVAL 22.0B October 2011


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet или не он
СообщениеДобавлено: 2017-дек-27 09:27 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1175
Откуда: Тула
milander писал(а):
Иногда код стопорится на if(RST_CLK_HSE2status() == ERROR)
Иногда проходит, но при этом вылетает HardFault после while, плюс после этого нельзя прошит мк, приходится дергать питанием
МК 1986BE1T 1140
Отладочная плата EVAL 22.0B October 2011

МК конечно не свежий, надо внимательно смотреть errata, однако в любом случае RST_CLK_HSE2status() будет ERROR какое-то время после включения RST_CLK_HSE2config(RST_CLK_HSE2_Bypass);
Нужно сделать паузу на пару мс или проверять через while(флаг + таймер).

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet или не он
СообщениеДобавлено: 2017-дек-27 13:52 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 173
Откуда: ПКК "Миландр"
Как и сказал prostoRoman, установку рабочего режима лучше обрабатывать подобным образом:

Код:
RST_CLK_HSEconfig(RST_CLK_HSE_ON);
while (RST_CLK_HSEstatus() != SUCCESS);


Везде где есть выход в бесконечный цикл.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet или не он
СообщениеДобавлено: 2018-янв-04 14:50 
Не в сети

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 26
Всё равно улетает в HardFault


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet или не он
СообщениеДобавлено: 2018-янв-04 20:39 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 481
На форуме есть пример распечатки регистров после HardFault. По содержимому стека можно определить команду, по которой он произошел. Однако, если есть прицел на серийную разработку, то МК версии 1140 лучше не использовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet или не он
СообщениеДобавлено: 2018-янв-06 10:44 
Не в сети

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 26
Да там что то с отладкой проблемы. подключаю ST-Link, ULINK2 не шьет. Подключаю J-Link шьеться, но пошаговая отладка вообще в разные места прыгает. Ладно всё равно после праздников купим новой ревизии контроллеры и там видно будет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet или не он
СообщениеДобавлено: 2018-янв-10 18:13 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 173
Откуда: ПКК "Миландр"
Возможно отладчик прыгает от того, что открыты какие-то окна с периферией или памятью. Необходимо все лишние окна закрыть, мне помогает.

Но в случае с ревизией 1140 это скорее всего ошибки из Errata.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet или не он
СообщениеДобавлено: 2018-май-21 08:31 
Не в сети

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 26
Спасибо Василий. Помагло. Черная магия прям.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB