CAN и ETHERNET(К1921ВК01Т)

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

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

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 15 июл 2021, 16:01

serg_vega писал(а):
15 июл 2021, 14:56
Вот я взял проект из папочки NIIET_Examples/can, заменил в нем ноги на B14 - CAN0_TX, B15 - CAN0_RX; F14 - CAN1_TX, F15 - CAN1_RX, добавил
NT_CAN->CAN_Node[0].NPCR=1<<CAN_NPCR_LBM_Pos; // Loop back mode
NT_CAN->CAN_Node[1].NPCR=1<<CAN_NPCR_LBM_Pos; // Loop back mode,
так как на плате вектора только один CAN, скомпилировал и.... не работает. Просто не входит в прерывания по CAN. Что я делаю не так?!!!
Ну да, LoolBack тоже надо включать было до
// CAN0, CAN1 is connected with the bus, node's interrupts are enable

NT_CAN->CAN_Node[1].NCR = CAN_NCR_TRIE_Msk;

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 23 июл 2021, 14:44

Ну почему при отладке программ с CAN необходимо все время плясать танцы с бубном!!!! Самые популярные сообщения:
1. Could not stop кортекс-M device! Please check the JTAG cable!
2. Error: Flash download failed! Target DLL has been cancelled!
3. Cannot access target. Shutting down debug session.
Единственный возможный вариант для входа в отладку - Load со снятыми галками Reset and Run. И после этого Debug.
На вопрос почему не цепляется к камню Jet Link ответа до сих пор нет!!! Два месяца прошло!!!

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 26 июл 2021, 10:33

А что у нас происходит с режимом CAN FIFO?
Инициация базового объекта.

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

{// Rieceve telemetr for B
				// base FIFO-object	
        CAN_Object_Config(6, CAN_OPERATION_RX, CAN_MESSAGE_COMMON);
				NT_CAN->CAN_Msg[6].MOFCR_bit.MMC=0x01; 		//  Rieceve FIFO
				NT_CAN->CAN_Msg[6].MOFGPR_bit.BOT=7;
				NT_CAN->CAN_Msg[6].MOFGPR_bit.CUR=7;
				NT_CAN->CAN_Msg[6].MOFGPR_bit.SEL=8;
				NT_CAN->CAN_Msg[6].MOFGPR_bit.TOP=9;				
//				NT_CAN->CAN_Msg[6].MOCTR_bit.SETMSGVAL=1;		
				
        temp_MOAR = (0x2 << CAN_MOAR_PRI_Pos);// | // filtration by identifier // Standart identifier		
        temp_MOAR = temp_MOAR + (0x3<<17);
        NT_CAN->CAN_Msg[6].MOAR = temp_MOAR;

        NT_CAN->CAN_Msg[6].MOFCR = (0x8 << CAN_MOFCR_DLC_Pos)|(1<<CAN_MOFCR_MMC_Pos);
        NT_CAN->CAN_Msg[6].MOIPR = (0x01 << CAN_MOIPR_RXINP_Pos);		// 1's channel
				NT_CAN->CAN_Msg[6].MOFCR_bit.OVIE=1; 	
				NT_CAN->CAN_Msg[6].MOFCR_bit.RXIE=1; 		
				NT_CAN->CAN_Msg[6].MOFCR_bit.TXIE=1; 			
			//	NT_CAN->CAN_Msg[6].MOFCR_bit.TXIE=1;	
				}		
С другого CAN просто передаем три сообщения по 8 байт поле данных. Я правильно понимаю: первое сообщение попадет 8 объект 7, второе в объект 8, третье в объект 9. В отладке же я вижу обратный порядок записи принятых сообщений: первое попадает в 9 объект, второе в 8-ой и третье - в 7-ой. Прерывание не возникает!!!! ЧТО НЕ ТАК?!!!!

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 26 июл 2021, 10:34

А что у нас происходит с режимом CAN FIFO?
Инициация базового объекта.

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

{// Rieceve telemetr for B
				// base FIFO-object	
        CAN_Object_Config(6, CAN_OPERATION_RX, CAN_MESSAGE_COMMON);
				NT_CAN->CAN_Msg[6].MOFCR_bit.MMC=0x01; 		//  Rieceve FIFO
				NT_CAN->CAN_Msg[6].MOFGPR_bit.BOT=7;
				NT_CAN->CAN_Msg[6].MOFGPR_bit.CUR=7;
				NT_CAN->CAN_Msg[6].MOFGPR_bit.SEL=8;
				NT_CAN->CAN_Msg[6].MOFGPR_bit.TOP=9;				
//				NT_CAN->CAN_Msg[6].MOCTR_bit.SETMSGVAL=1;		
				
        temp_MOAR = (0x2 << CAN_MOAR_PRI_Pos);// | // filtration by identifier // Standart identifier		
        temp_MOAR = temp_MOAR + (0x3<<17);
        NT_CAN->CAN_Msg[6].MOAR = temp_MOAR;

        NT_CAN->CAN_Msg[6].MOFCR = (0x8 << CAN_MOFCR_DLC_Pos)|(1<<CAN_MOFCR_MMC_Pos);
        NT_CAN->CAN_Msg[6].MOIPR = (0x01 << CAN_MOIPR_RXINP_Pos);		// 1's channel
				NT_CAN->CAN_Msg[6].MOFCR_bit.OVIE=1; 	
				NT_CAN->CAN_Msg[6].MOFCR_bit.RXIE=1; 		
				NT_CAN->CAN_Msg[6].MOFCR_bit.TXIE=1; 			
			//	NT_CAN->CAN_Msg[6].MOFCR_bit.TXIE=1;	
				}		
С другого CAN просто передаем три сообщения по 8 байт поле данных. Я правильно понимаю: первое сообщение попадет 8 объект 7, второе в объект 8, третье в объект 9. В отладке же я вижу обратный порядок записи принятых сообщений: первое попадает в 9 объект, второе в 8-ой и третье - в 7-ой. Прерывание не возникает!!!! ЧТО НЕ ТАК?!!!!

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 26 июл 2021, 15:15

А вот что не так... Все по Оруэллу, то есть наоборот. Для приема нужно разрешить прерывания 0x01 << CAN_MOIPR_TXINP_Pos, а не CAN_MOIPR_RXINP_Pos, странная терминология...

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 26 июл 2021, 17:10

Ну вот я принял три пакета по CAN, вижу их в регистрах, а что нужно сделать дальше, чтобы принять следующие три пакета? Флаг NEWDAT я очистил, данные считал. И?

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 28 июл 2021, 11:30

Очень бы хотелось увидеть эталонный пример от производителя для работы CAN с приемным FIFO. Например. Мне нужно принимать групповое сообщение, состоящее, допустим из N=3 CAN пакетов с общим ID. Задаю Базовым объект №6. Привязываю его к нулевому узлу CAN. Делаю объекты с 7 по 9 вспомогательными. MOFGPR[7].BOT=7; TOP=9; CUR=7; SEL=7. Прерывание - OVIE. Если смотреть в отладчике в таком режиме (по прерыванию OVIE), то пакеты приходят по три, только порядок их почему-то обратный, то есть пакет№1 оказывается в 9-ой ячейке, пакет №2 в 8-ой, а а №3 в седьмой. Ну и ладно. Но если поставить точку останова после передачи первого пакета, затем второго и т.п., то порядок в приемном ФИФО изменится. Первый пакет окажется в 7-ой ячейке, а №3 - в девятой. При отладке в регистре MOSTAT (было замечено при полном отсутствии повторного приема) возникают флаги RXPND и TXPND, NEWDAT, MSGVAL в 7-ом и 8-ом объектах, а в 9-ом возникают RXPND, TXPND - НЕ ВОЗНИКАЕТ, NEWDAT и MSGVAL - это понятно, но MSGLST и TXEN1 - ОТКУДА!!!!. Почему сбрасывается DIR?!!! Пробуем сбрасывать NEWDAT, как написано на стр 179 РП. И получаем ошибки. Опять же NEWDAT нужно сбросить где? (в базовом, во вспомогательных, во всех)? RXPND сбрасывать или нет?!! Единственное упоминание об этом на стр 274 РП - "Бит должен сбрасываться программно". Я его сбрасываю - в окне отладчика ноль эффекта. RXEN устанавливать или нет? Я его устанавливаю - в окне отладчика ноль эффекта. MSGVAL нужно устанавливать или нет? В каких объектах (базовом, вспомогательном)? Я устанавливаю....
Качество документации и примеров ниже плинтуса в подвальном помещении!!

редактор
Сообщения: 27
Зарегистрирован: 08 ноя 2016, 09:10

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение редактор » 28 июл 2021, 12:04

Давно это было, как модуль работает сейчас подробностей не помню, но при тестировании МК на опытной партии сделали вот такой код.
Вроде пример стабильно работал. Может что-то полезное для себя увидите.
Пример делали для МК 035.
Вложения
CanTest.cpp
(17.34 КБ) 40 скачиваний

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 29 июл 2021, 14:44

dav писал(а):
13 июл 2021, 18:09



Примеры расчета частот для CAN можно посмотреть в теме К1921ВК01Т, 1921ВК01Т1 - FAQ: viewtopic.php?f=37&t=931&p=4582#p4582
А прямо в первом же примере расчета скорости 1Мбит/сек нет случайно очередной "НЕТОЧНОСТИ"? Расчет ведется для Fin= 100МГц, откуда в финальной скорости берется 200МГц?

serg_vega
Сообщения: 93
Зарегистрирован: 20 июл 2020, 15:50
Предприятие: АО "ВНИИ "Вега"

Re: CAN и ETHERNET(К1921ВК01Т)

Сообщение serg_vega » 30 июл 2021, 10:41

Чем дальше в лес, тем толще партизаны... Проверил "расчет" скорости для 256КБит/сек от НИИЭТ. Да какой первокурсник его делал?!!! :shock:
1/256000= 3.9 мкс, а не 4 мкс!!!! Скорость в примере будет 250КБит/сек а не заявленные 256!!! Сколько байт в одном КБайте: 1000 или 1024?

Ответить

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

Пользователи онлайн

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