реклама на сайте
подробности

 
 
> Регистры CAN модуля в LPC1549, Нужна консультация
kolisnichenko_r
сообщение Dec 2 2015, 07:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Здравствуйте
Разбираюсь с CAN модулем в LPC1549. Все с ноля: МК, архитектура МК, CAN.
Перед этим имел дело с 8 битными МК и не сложные проекты.
Собственно вопросы:
1) В МК (CAN модуль) есть по 2 одинаковых регистра с разными номерами 1 и 2. Это означает 1 - передача, 2 - прием?
2) Как организовано передачу из объекта сообщения (message object - правильно ли я перевел) в регистры CAN?
3) На счет номера объекта сообщения (message number), написано, что можно создать 32 таких объекта, в регистрах IF1/2_CMDREQ их по 32. Это 32 на прием и 32 на передачу? Как определять какие на прием, какие на передачу?
4) Как настраивать фильтр и маску тоже не понятно.
Из примеров состряпал программу. Передача получилась, а вот с приемом ну никак.
Прошу помощи
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mempfis_
сообщение Dec 2 2015, 09:19
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Бегло просмотрел документацию на lpc11 и lpc15 - CAN в них похоже одинаковый.
На lpc11 у меня несколько серийных проектов.
Просмотрите в приложенных файлах инициализацию и работу с CAN.

Для работы я выбираю какие MSG OBJECT будут приёмные (RX), а какие передающие (TX)
CODE

//msg object для приёма сообщений
#define S6_BAM_CM_RX_MSG_OBJ 1
#define S6_BAM_DT_RX_MSG_OBJ 2

//msg object для отправки сообщений
#define S6_PASSPORT_TX_MSG_OBJ 10
#define S6_COUNTERS_TX_MSG_OBJ 11
#define S6_STATUS0_TX_MSG_OBJ 12
#define S6_STATUS1_TX_MSG_OBJ 13
#define S6_STATUS2_TX_MSG_OBJ 14
#define S6_STATUS3_TX_MSG_OBJ 15
#define S6_BAM_TX_MSG_OBJ 16


Настройка RX есть в приложенных файлах. При настройке определяется также маска фильтрации ACF-фильтра.
С TX работаем так:

CODE

//Передача сообщения 01 02 03 04 05 06 07 08 (01 -младший байт в сообщении, 08 - старший) на id 21 bit 0xabcd (extended frame)

stCANMSGObject msg;

msg.id = EXT_FRAME_TYPE | 0xabcd;
msg.dlc = 8; //длина данных (от 1 до 8)
msg.data[0] = 0x0201;
msg.data[1] = 0x0403;
msg.data[2] = 0x0605;
msg.data[3] = 0x0807;

CAN_Send(S6_PASSPORT_TX_MSG_OBJ, &msg);



Приём данных осуществляется в прерывании.
Любое принятое сообщение извлекается из RX MSG OBJECT и закидывается в FIFO. Далее уже в основной программе FIFO опрашивается в цикле до опустошения.

CODE
//проверяем rx fifo
stCANMSGObject can_rx_msg;
while(getMsgCAN(&can_rx_msg) != 0)
{
//выполняем проверку принятого сообщения
......
}

Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Dec 2 2015, 10:15
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Спасибо, разбираюсь
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 18:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.02589 секунд с 7
ELECTRONIX ©2004-2016