Страница 2 из 2

Re: 1921DR035 CAN ID принимаемого сообщения

Добавлено: 30 янв 2023, 10:11
smispp
Спасибо за ссылки, не знал о их существовании. Хорошо что есть аналог, а то я испугался, что такой сложный КАН придумали в НИИЭТе. :)

И все же как в прерывании определить ящик с сообщением?

1. Настроил N ящиков (объектов сообщения) на прием и M ящиков на передачу с общим прерыванием. Как в прерывании определить какой ящик вызвал прерывание?
Не перебирать же все ящики в прерывании на предмет NewDat.

Re: 1921DR035 CAN ID принимаемого сообщения

Добавлено: 03 фев 2023, 17:23
serg_vega
Я просто использую разные прерывания. Неужели у Вас больше чем 16 ящиков?

Re: 1921DR035 CAN ID принимаемого сообщения

Добавлено: 07 фев 2023, 13:21
smispp
serg_vega писал(а): 03 фев 2023, 17:23 Я просто использую разные прерывания. Неужели у Вас больше чем 16 ящиков?
Можно конечно и так, но должен быть более правильный способ. На каждое сообщение - прерывание?
Когда будет железо, можно попробовать проверять регистры MSPND и MSID ?

Re: 1921DR035 CAN ID принимаемого сообщения

Добавлено: 07 фев 2023, 14:43
dav
smispp писал(а): 30 янв 2023, 10:11 И все же как в прерывании определить ящик с сообщением?
Доброго времени суток!

Модуль CAN микроконтроллера 1921ВК035 имеет возможность настройки регистра ждущих прерываний. Подробно рассказано в подразделе 18.11 "Прерывания объектов сообщения" (Ждущие сообщения) на стр. 163 Руководства Пользователя. На рисунке 18.25 проиллюстрирована запись в регистр ждущих прерываний MSPND0-MSPND3.

Достаточно записать в битовое поле "MPN" регистров MOIPR объектов сообщений номер регистра MSPND (биты MPN[6:5]) и номер устанавливаемого бита в регистре MSPND (биты MPN[4:0]), настроить прерывания от объектов сообщений на одну или несколько линий прерывания и в прерывании читать регистры ждущих прерываний MSPND. Таким образом можно определить от каких объектов сообщения пришли запросы на прерывания при использовании большого количества объектов.