CAN и ETHERNET(К1921ВК01Т)

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

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

Александр
Сообщения: 43
Зарегистрирован: 03 июл 2017, 09:28
Предприятие: ЛЭМЗ

CAN и ETHERNET(К1921ВК01Т)

Сообщение Александр »

Добрый день! Есть ли примеры программ с использованием CAN и ETHERNET?
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

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

Сообщение bkolbov »

Добрый день!

Некоторые примеры использования можно найти в репозитории.
Аватара пользователя
MR.Smith
Сообщения: 78
Зарегистрирован: 25 апр 2016, 10:56

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

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

Чтобы не создавать новую тему про CAN напишу здесь.

При программировании объекта сообщения при попытке записать побитно регистр MOCTR следующим образом:

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

NT_CAN->CAN_msg[6].MOCTR_bit.SETRXEN = 1;
фактически приводит к записи 1 в следующие биты: RXEN, TXRQ, TXEN0 и TXEN1.

Правильно записывать сразу весь регистр так:

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

NT_CAN->CAN_msg[6].MOCTR = 0x00800000;
Получается, что регистр MOCTR нельзя записывать через битовые поля структуры?
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

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

Сообщение hgost »

MR.Smith писал(а): 15 авг 2017, 17:58 Получается, что регистр MOCTR нельзя записывать через битовые поля структуры?
Здравствуйте. Регистр MOCTR доступен только для записи. А побитовый доступ осуществляется посредством операции "чтение-модификация-запись". Этот регистр можно писать только весь сразу
Bond
Сообщения: 3
Зарегистрирован: 18 фев 2018, 21:27
Предприятие: ООО "ГАМЕМ"

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

Сообщение Bond »

Вопросы про контроллер Ethernet.
1) В документации сказано, что, кроме интерфейса MII, дополнительно поддерживаются интерфейсы MACMII, RMII, SMII, PMD, ENDEC (см. стр. 192 документации). Нигде не нашел, в каких регистрах какие биты управляют включением этих дополнительных интерфейсов. Особенно интересует RMII.
2) На следующей странице документации (стр. 193) дана весьма замысловатая формула адресации оперативной памяти контроллера Ethernet на LocalBus :
Адрес(LocalBus) = 00710000h + ((Адрес(ПДП)) /4).
Не понятно, что означает это таинственное смещение 00710000h ? В демонстрационной программе из репозитория, посвященной модулю Ethernet, буфера ввода-вывода для Ethernet расположены в совершенно обычном ОЗУ без какой либо привязки к абсолютному адресу 00710000h.
Может, кто в курсе дела ?
dav
Сообщения: 208
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

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

Сообщение dav »

Bond писал(а): 18 фев 2018, 21:43 Вопросы про контроллер Ethernet.
1) В документации сказано, что, кроме интерфейса MII, дополнительно поддерживаются интерфейсы MACMII, RMII, SMII, PMD, ENDEC (см. стр. 192 документации). Нигде не нашел, в каких регистрах какие биты управляют включением этих дополнительных интерфейсов. Особенно интересует RMII.
2) На следующей странице документации (стр. 193) дана весьма замысловатая формула адресации оперативной памяти контроллера Ethernet на LocalBus :
Адрес(LocalBus) = 00710000h + ((Адрес(ПДП)) /4).
Не понятно, что означает это таинственное смещение 00710000h ? В демонстрационной программе из репозитория, посвященной модулю Ethernet, буфера ввода-вывода для Ethernet расположены в совершенно обычном ОЗУ без какой либо привязки к абсолютному адресу 00710000h.
Может, кто в курсе дела ?
Доброго времени суток!
1) В данном контроллере доступен только интерфейс MII
2) На данную формулу не стоит обращать внимание. У блока Ethernet имеются только 2 FIFО: для приема – 36-разрядное объемом 4 Кбайта, для передачи – 40-разрядное объемом 2 Кбайта, доступ к которым осуществляется через контроллер прямого доступа к памяти.
В ближайшее время будут внесены соответствующие корректировки в техническое описание.
Роман
Сообщения: 28
Зарегистрирован: 26 янв 2018, 12:01
Предприятие: ВНИИЭМ

CAN

Сообщение Роман »

Добрый день, спрошу тут раз уж есть CAN в названии темы.
Объект сообщений 2 настроен на приёмопередачу (для ответа на RTR):

#define MOCTR_MSGVAL_SET (1<<21)
#define MOCTR_RXEN_SET (1<<23)
#define MOCTR_TXRQ_SET (1<<24)
#define MOCTR_TX_EN0_EN1_SET (3<<25)
#define MOCTR_DIR_SET (1<<27)
#define MOCTR_TXRQ_RESET (1<<8)

#define MOSTAT_TXRQ (1<<8)

NT_CAN->CAN_Msg[2].MOAR = (2<<30) | (3<<18);
NT_CAN->CAN_Msg[2].MOIPR = 0x00000000;
NT_CAN->CAN_Msg[2].MOFCR = 0x08000000; // только поле DLC, 8 байт.
NT_CAN->CAN_Msg[2].MOCTR = MOCTR_DIR_SET | MOCTR_RXEN_SET | MOCTR_MSGVAL_SET | MOCTR_TX_EN0_EN1_SET;

В главном цикле при изменении состояния собираюсь отправлять новые данные по собственной инициативе (обновляю new_state_l и new_state_h, выставляю флаг new_state_for_tx_fl и вызываю mbox2update()):

static uint16_t new_state_for_tx_fl = 0;
static uint16_t new_state_wait_end_tx_fl = 0;
uint32_t new_state_l = 0;
uint32_t new_state_h = 0;

void mbox2update(void)
{
if (new_state_for_tx_fl)
{
if (NT_CAN->CAN_Msg[2].MOSTAT & MOSTAT_TXRQ)
{
if (!new_state_wait_end_tx_fl) {
NT_CAN->CAN_Msg[2].MOCTR = MOCTR_TXRQ_RESET;
new_state_wait_end_tx_fl = 1;
} else {
// отправка ещё в процессе - жду.
return;
}
} else {
NT_CAN->CAN_Msg[2].MODATAL = new_state_l;
NT_CAN->CAN_Msg[2].MODATAH = new_state_h;
NT_CAN->CAN_Msg[2].MOCTR = MOCTR_TXRQ_SET;
new_state_wait_end_tx_fl = 0;
new_state_for_tx_fl = 0;
}
}
}
Правильно ли я себе представляю следующие моменты:
1. Если бит TXRQ в NT_CAN->CAN_Msg[2].MOSTAT установлен - пакет по какой-то причине ещё не отправлен
(в этом случае хочу чтобы дальнейшие попытки отправки были с новыми данными).
2. Запись NT_CAN->CAN_Msg[2].MOCTR = (1<<8) прекращает попытки отправки текущего пакета.
3. Отправка прекратится не мгновенно а по завершению текущей попытки, и тогда же сбросится TXRQ в NT_CAN->CAN_Msg[2].MOSTAT.
hgost
Сообщения: 61
Зарегистрирован: 14 дек 2015, 12:07
Предприятие: АО НИИЭТ
Откуда: НИИЭТ
Контактная информация:

Re: CAN

Сообщение hgost »

Роман писал(а): 02 мар 2018, 13:40 Правильно ли я себе представляю следующие моменты:
1. Если бит TXRQ в NT_CAN->CAN_Msg[2].MOSTAT установлен - пакет по какой-то причине ещё не отправлен
(в этом случае хочу чтобы дальнейшие попытки отправки были с новыми данными).
2. Запись NT_CAN->CAN_Msg[2].MOCTR = (1<<8) прекращает попытки отправки текущего пакета.
3. Отправка прекратится не мгновенно а по завершению текущей попытки, и тогда же сбросится TXRQ в NT_CAN->CAN_Msg[2].MOSTAT.
Добрый день.
1. Да. Если хотите новые данные, надо сбросить бит TXRQ.
2. Если передача уже идет, то она не прервется
3. Да, верно

Еще есть уточнение по поводу приема/передачи Вашим объектом №2. по программе DIR=1,означает что будет передано стандартное сообщение, а принять при такой установке он сможет только сообщение удаленного запроса. Имейте это в виду
Роман
Сообщения: 28
Зарегистрирован: 26 янв 2018, 12:01
Предприятие: ВНИИЭМ

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

Сообщение Роман »

Спасибо, этот объект планирую использовать на приём только удалённого запроса.
Роман
Сообщения: 28
Зарегистрирован: 26 янв 2018, 12:01
Предприятие: ВНИИЭМ

CAN

Сообщение Роман »

Добрый день, пытаюсь сделать обработку состояния BUS OFF, на данный момент в главном цикле такая проверка:
#define NSR_BOFF (1<<7)
if (NT_CAN->CAN_Node[0].NSR & NSR_BOFF)
NT_CAN->CAN_Node[0].NCR = 0;
При к.з. на линии в процессе отправки сообщения точка останова срабатывает, после восстановления линии сообщение доходит.

Из описания складывается ощущение что для этой цели можно использовать прерывание ALERT от узла,
т.к. бит ALERT в NSR выставляется при модификации бита BOFF и при разрещении ALIE в NCR это вроде должно вызывать прерывание.
Но при инициализации:
NT_CAN->CAN_Node[0].NIPR = 0;
NT_CAN->CAN_Node[0].NCR = (1<<3);
не приводит к появлению прерывания CAN0 (ситуация та же, ручная проверка убрана, прерывания от объектов сообщений работают), что нужно для использования прерываний от узла ?
Ответить

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