Миландр

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

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




Начать новую тему  Ответить на тему  [ 23 сообщения ]  На страницу « 1 2
Автор Сообщение
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-14 13:25 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 530
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
Ann писал(а): *
Здравствуйте!

Возникла проблема.

Если в программном коде нет прерываний, то микроконтроллер работает стабильно и из-под отладки, и при запуске из 1645РУ4АУ.

Если же используются прерывания, то программа вылетает даже из отладчика. Во внешнее ОЗУ она записывается и запускается оттуда. Но тоже работает пару секунд, после чего вылетает.

Что было упущено? Подскажите, пожалуйста.

Заранее спасибо.
Здравствуйте!

Подскажите, пожалуйста, ожидаемое "зависание" связано потенциально с возникновением прерывания? Чтобы ответить на вопрос предметнее, пожалуйста, попробуйте сгенерировать прерывание, например, по таймеру с регламентированным временем и оставить только его. Если "зависание" происходит в момент получения прерывания, на что косвенно указывают слова о работоспособности на протяжении пары секунд из исходного обращения, то необходимо анализировать, на какой конкретно адрес обработчика прерывания микроконтроллер хочет перейти, возможно, это и влечет за собой сбой. На протяжении работы не лишним будет производить мониторинг состояния регистра VTOR, входящего в состав регистров управления ядра (SCS). Дополнительно сообщите, пожалуйста, как именно фиксируется "зависание": это попадание на какое-либо исключение, например, HardFault или что-то другое?

Спасибо.

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

Информационный портал отдела технической поддержки support.milandr.ru


Вернуться к началу
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-14 14:25 
Не в сети

Зарегистрирован: 2021-авг-05 16:06
Сообщения: 37
Организация: АО Созвездие
Lampadov писал(а): *
...Подскажите, пожалуйста, ожидаемое "зависание" связано потенциально с возникновением прерывания? Чтобы ответить на вопрос предметнее, пожалуйста, попробуйте сгенерировать прерывание, например, по таймеру с регламентированным временем и оставить только его. Если "зависание" происходит в момент получения прерывания, на что косвенно указывают слова о работоспособности на протяжении пары секунд из исходного обращения, то необходимо анализировать, на какой конкретно адрес обработчика прерывания микроконтроллер хочет перейти, возможно, это и влечет за собой сбой. На протяжении работы не лишним будет производить мониторинг состояния регистра VTOR, входящего в состав регистров управления ядра (SCS). Дополнительно сообщите, пожалуйста, как именно фиксируется "зависание": это попадание на какое-либо исключение, например, HardFault или что-то другое?

Спасибо.
Спасибо, что ответили.

Код программы
/* Includes ------------------------------------------------------------------*/
#include "MDR1986VE8T.h"
#include "spec.h"

#include "mdr32f8_config.h"
#include "mdr32f8_port.h"
#include "mdr32f8_clkctrl.h"

#include "mdr32f8_tim.h"

/* Private typedef -----------------------------------------------------------*/
PORT_InitTypeDef PORT_InitStructure;

////////////////////////////////////////////////////////////////////////////
TIMER_CntInitTypeDef sTIM_CntInit;
TIMER_ChnInitTypeDef sTIM_ChnInit;
TIMER_ChnOutInitTypeDef sTIM_ChnOutInit;

/* Private variables ---------------------------------------------------------*/
const uint8_t Cfg_0 __attribute__((at(0x10000400))) = 0xB2; // CFG0 - bus data 16 bit	
const uint8_t Cfg_1 __attribute__((at(0x10000408))) = 0x71; // CFG1 - without ECC
/* Private define ------------------------------------------------------------*/
static unsigned long 	timeMs = 0;

int main(void)
{	
    /* ONLY REV2 MCU, errata 0015. Disable Power-on-Reset control. Hold the SW4 button down until operation complete */
    //POR_disable();
    
    // Key to access clock control 
	UNLOCK_UNIT (CLK_CNTR_key);
	// Key to access fault control
  UNLOCK_UNIT (FT_CNTR_key); 
	
	/* Set CLKCTRL to default */
	CLKCTRL_DeInit();
	/* Enable HSE0 clock */
	CLKCTRL_HSEconfig(CLKCTRL_HSE0_CLK_BYP);
	
	while(CLKCTRL_HSEstatus(CLKCTRL_HSEn_STAT_HSE0_RDY) != SUCCESS){}
	
	CLKCTRL_CPUclkPrescaler(CLKCTRL_CPU_CLK_CPUclkDIV1);
			
	/* Enable PORTx clk */
	CLKCTRL_PER0_CLKcmd(CLKCTRL_PER0_CLK_MDR_PORTB_EN, ENABLE);
	
	/* Allow write to PORT regs */
  UNLOCK_UNIT (PORTB_key);
   
  /* Configure PORTB pins [8;25] for output */
	PORT_InitStructure.PORT_Pin   = (PORT_Pin_25);
	
	PORT_InitStructure.PORT_SOE    = PORT_SOE_OUT;
	PORT_InitStructure.PORT_SANALOG  = PORT_SANALOG_DIGITAL;
	PORT_InitStructure.PORT_SPD = PORT_SPD_OFF;
	PORT_InitStructure.PORT_SPWR = PORT_SPWR_10;
	PORT_InitStructure.PORT_SFUNC  = PORT_SFUNC_USER;

	PORT_Init(PORTB, &PORT_InitStructure);
	
	CLKCTRL_PER0_CLKcmd(CLKCTRL_PER0_CLK_MDR_TMR1_EN, ENABLE);
			
	/* TIMER1 Configuration */
  /* Time base configuration */
  TIMER_DeInit(MDR_TMR1);
  TIM_CLK_en(TIM1, TIM_CLKdiv1);
	
	 /* Initializes the TIMERx Counter ------------------------------------*/
  
  sTIM_CntInit.TIMER_CounterMode              = TIMER_CntMode_ClkFixedDir;
  sTIM_CntInit.TIMER_CounterDirection         = TIMER_CntDir_Up;
  sTIM_CntInit.TIMER_EventSource              = TIMER_EvSrc_None;//TIMER_EvSrc_TM1;	// 
  sTIM_CntInit.TIMER_FilterSampling           = TIMER_FDTS_TIMER_CLK_div_1;
  sTIM_CntInit.TIMER_ARR_UpdateMode           = TIMER_ARR_Update_Immediately;
  sTIM_CntInit.TIMER_ETR_FilterConf           = TIMER_Filter_1FF_at_TIMER_CLK;
  sTIM_CntInit.TIMER_ETR_Prescaler            = TIMER_ETR_Prescaler_None;	//TIMER_ETR_Prescaler_div_2;		//
  sTIM_CntInit.TIMER_ETR_Polarity             = TIMER_ETRPolarity_NonInverted;
  sTIM_CntInit.TIMER_BRK_Polarity             = TIMER_BRKPolarity_NonInverted;	
	sTIM_CntInit.TIMER_Prescaler                = 0x4f;							//PSG 
  sTIM_CntInit.TIMER_Period                   = 100;			//ARR   1 ms???
	
	TIMER_CntInit (MDR_TMR1,&sTIM_CntInit);

	TIMER_ITConfig(MDR_TMR1,TIMER_STATUS_CNT_ARR,ENABLE);
  TIMER_Cmd(MDR_TMR1,ENABLE);
 	NVIC_EnableIRQ(TMR1_IRQn);	
	
	 while (1)
   {
		 
	 } 
 }

 void INT_TMR1_Handler(void)		//////////////////////////////////////////////
{
	MDR_TMR1->STATUS = 0;
	
	if (++timeMs == 100) 
		{
			timeMs = 0;		
			PORTB->RXTX ^= PORT_Pin_25;
		}		
			
	NVIC_ClearPendingIRQ(TMR1_IRQn);
}


В прерывание программа заходит. То есть оно не является первопричиной "вылета". В подпрограмме обработки прерывания по таймеру происходит мигание светодиода раз в сто прерываний. Таймер настроен на прерывание раз в 1 мс. Внешний кварц 80МГц. Светодиод мигает несколько минут под отладкой и раз 10, если происходит запуск из внешней памяти. То есть прерывания происходят. Но потом микроконтроллер перестаёт подавать признаки жизни. Под отладкой это выглядит так:
Вложение:
[ attachment ]
Снимок экрана (7).png [ 222.58 КБ | 268 просмотров ]
При этом программа без прерываний вполне корректно отрабатывает все, что положено. И запускается из внешней памяти. Видимо, проблема именно в появлении прерывания. И в 1645РУ4АУ. Потому что без внешней памяти программа с прерываниями работает адекватно.

Нужны ли какие-то дополнительные настройки, чтобы программный код с использованием прерываний корректно запускался из внешней памяти? Подскажите, пожалуйста.

Заранее спасибо.


Вернуться к началу
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-14 15:44 
Не в сети

Зарегистрирован: 2020-дек-10 09:35
Сообщения: 58
Организация: Startex
А вы закомментируйте мигание пином, упадет ли?


Вернуться к началу
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-14 15:58 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 770
Откуда: г. Санкт-Петербург
Непонятно какие настройки памяти программ и данных в проекте.
По выложенным материалам смущают значения адреса стека в регистре MSP 0x00000000 (д.б. в диапазоне 0x20000000 - 0x20007fff), а также адрес в окне дизассемблера - должен начинаться с 0x10000000.


Вернуться к началу
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-14 15:59 
Не в сети

Зарегистрирован: 2021-авг-05 16:06
Сообщения: 37
Организация: АО Созвездие
AndOrFin писал(а): *
А вы закомментируйте мигание пином, упадет ли?
Упало. Через 6 минут.

Надо отметить, что подобное поведение замечено только на одной плате. Та же самая программа с такими же настройками была запущена на другой плате, и там пин мигал до тех пор, пока питание не отключили.

Что это может быть? Где-то что-то не пропаяно?


Вернуться к началу
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-14 16:11 
Не в сети

Зарегистрирован: 2021-авг-05 16:06
Сообщения: 37
Организация: АО Созвездие
vasili писал(а): *
Непонятно какие настройки памяти программ и данных в проекте.
По выложенным материалам смущают значения адреса стека в регистре MSP 0x00000000 (д.б. в диапазоне 0x20000000 - 0x20007fff), а также адрес в окне дизассемблера - должен начинаться с 0x10000000.

Настройки памяти в проекте:


Вложение:
[ attachment ]
Снимок экрана (8).png [ 173.81 КБ | 246 просмотров ]


Сразу после загрузки программы:

Вложение:
[ attachment ]
Снимок экрана (9).png [ 217.36 КБ | 246 просмотров ]


Вернуться к началу
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-14 16:41 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 770
Откуда: г. Санкт-Петербург
Ann писал(а): *
...Надо отметить, что подобное поведение замечено только на одной плате. Та же самая программа с такими же настройками была запущена на другой плате, и там пин мигал до тех пор, пока питание не отключили.

Что это может быть? Где-то что-то не пропаяно?
По всей видимости аппаратные проблемы с конкретной платой.
Попробуйте написать код тестирования внешней ОЗУ (с перебором различных комбинаций адресов и данных) для внутренней памяти МК и запустить на выполнение с зацикливанием, с контролем сигналов осциллографом на выводах м/сx памяти.
Может поможет идентифицировать проблему.


Вернуться к началу
 Заголовок сообщения: Re: Режим загрузки EXTBUS_CFG
СообщениеДобавлено: 2021-окт-15 10:10 
Не в сети

Зарегистрирован: 2021-авг-05 16:06
Сообщения: 37
Организация: АО Созвездие
vasili писал(а): *
Попробуйте написать код тестирования внешней ОЗУ (с перебором различных комбинаций адресов и данных) для внутренней памяти МК и запустить на выполнение с зацикливанием, с контролем сигналов осциллографом на выводах м/сx памяти.
Может поможет идентифицировать проблему.
Спасибо, попробую.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 23 сообщения ]  На страницу « 1 2

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


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

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


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

Перейти: 

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