К1921ВК01Т (арм Cortex-M4F)

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

AlexPo1
Сообщения: 2
Зарегистрирован: 03 июл 2017, 23:42
Предприятие: AО "Технодинамика"
Откуда: Москва

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение AlexPo1 »

Добрый день всем!
Прошу уточнить логику работы ШИМ высокого разрешения. Допустим я сформировал фронт импульса PWMA с помощью ШИМ высокого разрешения. Дальше подаю этот импульс на схему, формирующую мёртвое время. Мёртвое время кратно целому количеству тактов синхронизирующей частоты TBCLK. Предполагаю, что задерживать на мёртвое время фронт, сформированный ШИМ высокого разрешения нельзя, т.к. этот фронт будет синхронизирован с TBCLK и добавка, обусловленная аппаратной линией задержки будет утрачена. Правильно ли я рассуждаю? Другими словами: правильно ли, что мёртвое время имеет смысл добавлять только к фронту, синхронному с фронтом импульсов TBCLK?
saleshin
Сообщения: 3
Зарегистрирован: 13 июл 2017, 15:01
Предприятие: ФГУП ЭЗАН

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение saleshin »

Не так давно приобрели отладочную плату MBS-К1921ВК01Т.

Процессор нам более менее подошёл (сравниваем с Миландром). Смогли даже поднять CAN интерфейс и организовать по нему обмен на скорости 1Мбит со сторонними модулями.

Вопрос следующий в спецификации на процессор имеется встроенный Ethernet интерфейс, но на плате Ethernet разведён через микросхему преобразователь на SPI. Связано ли это с проблемами встроенного порта Ethernet и есть ли у Вас пример его промышленного применения.
alen_kray
Сообщения: 7
Зарегистрирован: 13 июл 2017, 15:24
Предприятие: temp_

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение alen_kray »

Здравствуйте. Подскажите, есть ли пример работы с CAN без FIFO? Либо пример настроек для обычного алгоритма передачи и приема. И каким образом можно сбросить ошибки возникающие при передаче или приеме сообщений, не переинициализируя при этом CAN.
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bkolbov »

saleshin писал(а): 13 июл 2017, 15:04 Не так давно приобрели отладочную плату MBS-К1921ВК01Т.

Процессор нам более менее подошёл (сравниваем с Миландром). Смогли даже поднять CAN интерфейс и организовать по нему обмен на скорости 1Мбит со сторонними модулями.

Вопрос следующий в спецификации на процессор имеется встроенный Ethernet интерфейс, но на плате Ethernet разведён через микросхему преобразователь на SPI. Связано ли это с проблемами встроенного порта Ethernet и есть ли у Вас пример его промышленного применения.

Добрый день!

Почему в фирме, которая разрабатывала плату, приняли именно такое инженерное решение - мы не знаем. Ethernet работает.
Пример можно найти в этом репозитории (example_projects / chip / K1921VK01T / GCC / Eth_Test / )
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение hgost »

AlexPo1 писал(а): 04 июл 2017, 00:39 Прошу уточнить логику работы ШИМ высокого разрешения.
Добрый день! Извините за задержку с ответом.
В ТО в подразделе "Блок ШИМ высокого разрешения" есть схема, показывающая последовательность блоков, оказывающих воздействие на выходной сигнал. Генератор мертвого времени стоит в начале этой цепочки, а блок высокой точности - в самом ее конце. Т.е сначала с сигналом пройдут все преобразования, добавится мертвое время, а потом полученный сигнал перед выходом проходит через аппаратную линию задержки
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bkolbov »

alen_kray писал(а): 13 июл 2017, 15:32 Здравствуйте. Подскажите, есть ли пример работы с CAN без FIFO? Либо пример настроек для обычного алгоритма передачи и приема. И каким образом можно сбросить ошибки возникающие при передаче или приеме сообщений, не переинициализируя при этом CAN.
Здравствуйте!

Выложили пример работы с CAN здесь (example_projects/chip/K1921VK01T/CodeMaster++/can_simple/).
vadim3103
Сообщения: 3
Зарегистрирован: 25 июн 2017, 20:38
Предприятие: земля))

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение vadim3103 »

1. При настройке CAN по примерам возникает ошибка "BIT 0 EROR" (регистр NSR->LEC) и взводятся флаг ALERT . По какой причине и как можно исправить?
* Пытаюсь настроить на выдачу сообщения (пока без приема)
Код настройки:

Код: Выделить всё

// Настроить CAN0 на 1Мб/с
FunctionalState SETUP_CAN0_1Mb()
{
	CAN_Node_init_type NODE; //структура узла CAN
	uint8_t PANAR1;
	uint8_t PANAR2;
	uint32_t ID;
	
	//*********************************************
	// ВКЛЮЧАЕМ ПЕРЕФЕРИЮ
	//*********************************************
	CAN_set_enabled_state(ENABLE);
	
	// Ждем включения
  CAN_wait_enabled_state();
	
	// Делитель 1=(1024-1023)=fin=fout в режиме нормального деления
	CAN_set_delitel_chastoti(DM_NORMAL,1023);	
	
	//*********************************************	
	// НАСТРАИВАЕМ УЗЕЛ CAN
	//*********************************************
	NODE.Node = CAN_Node_Node0;
	NODE.Irq.ALIE = DISABLE;
	NODE.Irq.LECIE = DISABLE;
	NODE.Irq.TRIE = DISABLE;
	NODE.Speed.BRP = 14;
	NODE.Speed.SJW = 2;
	NODE.Speed.TSEG1 = 5;
	NODE.Speed.TSEG2 = 4;
	
	// Конфигурация узла CAN
	CAN_set_node(&NODE);
	
	// Установка линий прерываний
	NT_CAN->CAN_Node[0].NIPR_bit.CFCINP = 8;
	NT_CAN->CAN_Node[0].NIPR_bit.TRINP = 12;
	NT_CAN->CAN_Node[0].NIPR_bit.LECINP = 10;
	NT_CAN->CAN_Node[0].NIPR_bit.ALINP = 11;
	
	// Установка режима ждущих сообщений
	NT_CAN->MCR_REG_bit.MPSEL = 0xf;
	
	// Маска для ждущих битов сообщений
	NT_CAN->MSIMASK = 0xFFFFFFFF;	
	
	//NT_CAN->CAN_Node[0].NPCR_bit.LBM =1;
	
	PANAR2 = 1;
	PANAR1 = 0;
	CAN_PANCTR_COMMAND(PANCMD_STATIC_ADD_OBJ_IN_LIST,PANAR2,PANAR1);
	
	NT_CAN->CAN_Msg[0].MOFCR_bit.MMC = 0;
	NT_CAN->CAN_Msg[0].MOFCR_bit.DLC = 0x8;
	NT_CAN->CAN_Msg[0].MOFCR_bit.STT = 0x1;//!!!!!!!! Однократная передча
	
	NT_CAN->CAN_Msg[0].MOAR_bit.ID = 0x100;
	NT_CAN->CAN_Msg[0].MOAR_bit.IDE = 0;
	NT_CAN->CAN_Msg[0].MOAR_bit.PRI = 1;
	
	NT_CAN->CAN_Msg[0].MOAMR_bit.MIDE = 0;
	NT_CAN->CAN_Msg[0].MOAMR_bit.AM = 0x1FFFFFFF;
	
	NT_CAN->CAN_Msg[0].MOIPR = 0;
	
	NT_CAN->CAN_Msg[0].MODATAH = 0x01;
	NT_CAN->CAN_Msg[0].MODATAL = 0x02;
	
	/*
	NT_CAN->CAN_Msg[0].MOCTR_bit.SETDIR =1;
	NT_CAN->CAN_Msg[0].MOCTR_bit.SETTXEN0 =1;
	NT_CAN->CAN_Msg[0].MOCTR_bit.SETTXEN1 =1;
	NT_CAN->CAN_Msg[0].MOCTR_bit.SETMSGVAL =1;
	NT_CAN->CAN_Msg[0].MOCTR_bit.SETTXRQ=1;
	*/
	NT_CAN->CAN_Msg[0].MOCTR = 0xF200000;
	__NOP();
	
	NT_CAN->CAN_Node[0].NCR_bit.INIT = 0; // включения узла
	NT_CAN->CAN_Node[0].NCR_bit.CCE = 0; // режим конфигурации	
}

Код: Выделить всё

// Включение контроллера CAN
void CAN_set_enabled_state(FunctionalState State)
{
		if (State == ENABLE)
		{
				if (!CAN_check_enabled_state())
				{
					NT_CAN->CLC_bit.DISR = ENABLE_DISS_DISR;
				}
		}
		else
		{
				if (CAN_check_enabled_state())
				{
					NT_CAN->CLC_bit.DISR = DISABLE_DISS_DISR;
				}
		}
}

// Проверить включен/выключен can
FunctionalState CAN_check_enabled_state()
{
		return (FunctionalState)(!NT_CAN->CLC_bit.DISS);
}

// Ожидание включения
void CAN_wait_enabled_state()
{
		while (NT_CAN->CLC_bit.DISS != ENABLE_DISS_DISR)
	{
			NOP5;
	};
	
	while (NT_CAN->PANCTR)
	{
			NOP5;
	};
}

// Настройка узла Can
void CAN_set_node(CAN_Node_init_type* Node_init)
{
	//************
	
	NT_CAN->CAN_Node[Node_init->Node].NCR_bit.INIT = 1; // выключение узла
	NT_CAN->CAN_Node[Node_init->Node].NCR_bit.CCE  = 1; // режим конфигурации	
	
	//************
	
	NT_CAN->CAN_Node[Node_init->Node].NCR_bit.TRIE 	= Node_init->Irq.TRIE;
	NT_CAN->CAN_Node[Node_init->Node].NCR_bit.LECIE = Node_init->Irq.LECIE;
	NT_CAN->CAN_Node[Node_init->Node].NCR_bit.ALIE 	= Node_init->Irq.ALIE;
	
	//************
	
	NT_CAN->CAN_Node[Node_init->Node].NBTR_bit.BRP = Node_init->Speed.BRP;
	NT_CAN->CAN_Node[Node_init->Node].NBTR_bit.SJW = Node_init->Speed.SJW;
	NT_CAN->CAN_Node[Node_init->Node].NBTR_bit.TSEG1 = Node_init->Speed.TSEG1;
	NT_CAN->CAN_Node[Node_init->Node].NBTR_bit.TSEG2 = Node_init->Speed.TSEG2;
	
	//************
	
	//NT_CAN->CAN_Node[Node_init->Node].NCR_bit.INIT = 0; // включения узла
	//NT_CAN->CAN_Node[Node_init->Node].NCR_bit.CCE = 0; // режим конфигурации	
	
	//************

};

// Установка делителя частоты
void CAN_set_delitel_chastoti(State_FDR_DM DM_state,uint16_t STEP_count)
{
			NT_CAN->FDR_bit.DM = DM_state;
			NT_CAN->FDR_bit.STEP = STEP_count;
}

//	Установка регистра PANCTR
void CAN_PANCTR_COMMAND(PANCMD_type PANCMD,uint8_t PANAR2,uint8_t PANAR1)
{
		if (PANCMD == PANCMD_INIT_LIST)
		{
			NT_CAN->CAN_Node[0].NCR_bit.INIT = 1;
			NT_CAN->CAN_Node[0].NCR_bit.CCE  = 1;
			NT_CAN->CAN_Node[1].NCR_bit.INIT = 1;
			NT_CAN->CAN_Node[1].NCR_bit.CCE  = 1;
		};
		
		// Ждем биты RBUSY и BUSY
		while((NT_CAN->PANCTR&PANCTR_MASK_RBUSY_BUSY)!=0x0)
		{
				NOP5;
		}
		//	Выставляем значения
		NT_CAN->PANCTR_bit.PANAR2 = PANAR2;
		NT_CAN->PANCTR_bit.PANAR1 = PANAR1;
		NT_CAN->PANCTR_bit.PANCMD = PANCMD;
		
		NOP5;	
		
		if (PANCMD == PANCMD_INIT_LIST)
		{
			NT_CAN->CAN_Node[0].NCR_bit.INIT = 0;
			NT_CAN->CAN_Node[0].NCR_bit.CCE  = 0;		
			NT_CAN->CAN_Node[1].NCR_bit.INIT = 0;
			NT_CAN->CAN_Node[1].NCR_bit.CCE  = 0;	
		};
};
2. При настройки ножки по примеру контроллер зависает и не видится программатором. Спасает полный erase через swd. В чем проблема?

Код: Выделить всё

  
  NT_GPIOE -> ALTFUNCSET = 0x0004;        //for CAN-outputs - 1 function
  NT_COMMON_REG -> GPIODEN2 = 0x40000000;   //for CAN-outputs - 1 function
  NT_COMMON_REG -> GPIOPCTLF = 0x00000000;

  NT_GPIOF -> ALTFUNCSET = 0xC000;        //for CAN-outputs - 1 function
  NT_COMMON_REG -> GPIODEN3 = 0x00000080;
  NT_COMMON_REG -> GPIOPCTLG = 0x00000000;

  NT_GPIOG -> ALTFUNCSET = 0x0080;        //for CAN-outputs - 1 function
  NT_COMMON_REG -> GPIODEN3 = 0x00000080;
  NT_COMMON_REG -> GPIOPCTLG = 0x00000000;
  
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение hgost »

vadim3103 писал(а): 18 июл 2017, 23:22 1. При настройке CAN по примерам возникает ошибка "BIT 0 EROR" (регистр NSR->LEC) и взводятся флаг ALERT . По какой причине и как можно исправить?
2. При настройки ножки по примеру контроллер зависает и не видится программатором. Спасает полный erase через swd. В чем проблема?
Здравствуйте!
1. Попробуйте замкнуть 2 узла между собой, либо, если нет такой схемотехнической возможности, воспользуйтесь режимами обратной петли (регистр NPCR) или режимом анализа (NCR->CALM). В режиме петли узлы будут соединены виртуально внутри контроллера. Ошибки могут возникать из-за того что нет бита подтверждения от принимающего узла. Начните с этого и проверьте, будут ли возникать такие же ошибки.
2. Попробуйте такой вариант кода. Он более корректен. Проблема была в том, что делая прямое присвоение регистру GPIODEN отключались вывода отладки, находящиеся на этом порту. К этим регистрам следует применять операции типа чтение-модификация-запись.

Код: Выделить всё

  NT_GPIOE -> ALTFUNCSET = 0x0004;       
  NT_COMMON_REG -> GPIODENE |= 0x0004;   
  NT_COMMON_REG -> GPIOPCTLF = 0x00000000;

  NT_GPIOF -> ALTFUNCSET = 0xC000;       
  NT_COMMON_REG -> GPIODENF |= 0xC000;
  NT_COMMON_REG -> GPIOPCTLG = 0x00000000;

  NT_GPIOG -> ALTFUNCSET = 0x0080;     
  NT_COMMON_REG -> GPIODENG |= 0x0080;
  NT_COMMON_REG -> GPIOPCTLG = 0x00000000;
Аватара пользователя
MR.Smith
Сообщения: 78
Зарегистрирован: 25 апр 2016, 10:56

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение MR.Smith »

Здравствуйте!

Кто-нибудь пытался записывать данные во Flash во время работы программы (средствами самой прошивки).
Например для хранения констант и уставок. Передача в микроконтроллер данных по UART с последующим сохранением констант в энергонезависимую память.
Как это можно сделать в этом микроконтроллере?
Может быть у кого-нибудь пример кода найдется?
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение hgost »

MR.Smith писал(а): 14 авг 2017, 14:56 Здравствуйте!

Кто-нибудь пытался записывать данные во Flash во время работы программы (средствами самой прошивки).
Например для хранения констант и уставок. Передача в микроконтроллер данных по UART с последующим сохранением констант в энергонезависимую память.
Как это можно сделать в этом микроконтроллере?
Может быть у кого-нибудь пример кода найдется?
Добрый день. Запись данных во Flash возможна только когда исполнение кода идет не из самой Flash. Т.е достаточно будет разместить саму функцию/обработчик (в котором содержится непосредственно команда к записи Flash) в области RAM или внешней памяти и ожидать окончания процесса записи, не допуская перехода на код, находящийся во Flash, до окончания процесса записи.
Ответить

Вернуться в «32-разрядные микроконтроллеры»