Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2020-фев-25 20:37

Часовой пояс: UTC+03:00




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

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 33
Организация: АО «Государственный Рязанский приборный завод»
Использую код
#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
Сообщения: 1428
Откуда: Тула
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
Сообщения: 470
Организация: Milandr
Откуда: ПКК "Миландр"
Как и сказал prostoRoman, установку рабочего режима лучше обрабатывать подобным образом:
RST_CLK_HSEconfig(RST_CLK_HSE_ON);
while (RST_CLK_HSEstatus() != SUCCESS);
Везде где есть выход в бесконечный цикл.


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

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 33
Организация: АО «Государственный Рязанский приборный завод»
Всё равно улетает в HardFault


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

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


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

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


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

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

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


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

Зарегистрирован: 2016-июн-21 21:35
Сообщения: 33
Организация: АО «Государственный Рязанский приборный завод»
Спасибо Василий. Помагло. Черная магия прям.


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

Часовой пояс: UTC+03:00


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя


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

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB