4. Фрейм данных помещается в буфер сообщений 14 ECAN узла 1
Рисунок 9. Удалённый запрос/ответ
1. Узел, передающий удалённый запрос, должен иметь передающий буфер, чтобы послать удалённый запрос, и один приёмный буфер, чтобы получить в ответ фрейм данных.
2. Узел, получающий удалённый запрос должен иметь передающий буфер, чтобы передать фрейм данных в ответ на полученный удалённый запрос.
3. CiBUFPNTm <FnBP> должен указывать на передающий буфер в случае удалённого запроса.
4. CiTRmnCON <RTREN> должен быть установлен так, чтобы, когда удалённый запрос был получен, CiTRmnCON <TXREQ> бит будет автоматически установлен.
Пример 3 иллюстрирует программный код для передачи расширенного удалённого запроса используя буфер сообщения 2.
Пример 3. Пример программы для перадачи расширенного удалённого запроса
/* Назначаем буфер сообщения 32x8слов для ECAN1 в DMARAM */
unsigned int ecan1MsgBuf[32][8] __attribute__(space(dma));
DMA1STA = __builtin_dmaoffset(ecan1MsgBuf);
/* Конфигурируем буфер сообщения 0 для передачи, а также назначаем приоритет */
C1TR23CONbits.TXEN0 = 0x1;
C1TR23CONbits.TX0PRI = 0x2;
/* Записываем сообщение в буфер 0 */
/* CiTRBnSID = 0bxxx1 0010 0011 1111 = 0х123F
IDE = 0b1 SRR = 0b1 SID<10:0> : 0b100 1000 1111 */
ecan1MsgBuf[2][0] = 0x123F;
/* CiTRBnEID = 0bxxxx 1111 0000 0000 = 0x0F00
EID<17:6> = 0b1111 0000 0000 */
ecan1MsgBuf[2][1] = 0x0F00;
/* CiTRBnDLC = 0b0000 1110 xxx0 1111 = 0x0E0F
EID<17:6> = 0b000011 RTR = 0b1 RB1 = 0b0 RB0 = 0b0 DLC = 0b1111 */
ecan1MsgBuf[2][2] = 0x0E0F;
/* Байты данных отсутствуют для удалённого запроса */
/* Делаем запрос на передачу данных из буфера 2 */
C1TR23CONbits.TXREQ2 = 0x1;
7. ПРИЁМ СООБЩЕНИЙ ECAN
ECAN модуль может принимать и стандартные и расширенные фреймы из CAN шины. Кроме того он имеет дополнительную возможность автоматически передавать принятые сообщения в буфер определяемый пользователем в DMA RAM, таким образом исключая необходимость пользователю отслеживать копирование сообщения из аппаратного регистра в буфер определяемый пользователем. Формат хранения сообщения в пределах буфера DMA идентичен передающим буферам, с каждым сообщением (включая связанный регистр статуса) занимаемым 8 слов DMA RAM.
Две главных стадии процесса приёма из шины ECAN описаны ниже, с упрощённым примером процесса приёма показанным на рисунке 10 и рисунке 13.
7.1 Принятые сообщения и приемный фильтр.
Как показано на рисунке 10, каждое приходящее по шине сообщение принимается в буфер приемных сообщений, и его поле идентификатора сравнивается с 16 приемными фильтрами определенными пользователем. Каждый принятый стандартный фрейм данных состоит из 11-битного стандартного идентификатора (SID), и каждый расширенный кадр данных состоит из 11-битного стандартного идентификатора и 18-битного расширенного идентификатора. Если все биты принятого идентификатора полностью одинаковы с соответствующими битами любого из приемных фильтров, ECAN модуль генерирует передачу DMA запроса в DMA контролер, таким образом сообщение может быть принято в назначенный буфер в DMA RAM.
Рисунок 10. Приём сообщения и фильтрация
7.1.1 Приемный фильтр
Рисунок 11 показывает как входящий идентификатор сообщения начинает сравниваться с фильтр/маской битами для стандартного кадра. Рисунок 12 показывает как входящий идентификатор сообщения начинает сравниваться с фильтр/маской битами для расширенного кадра.
Рисунок 11. Фильтрация при приёме стандартного фрейма
Рисунок 12. Фильтрация при приёме расширенного фрейма
Приемные фильтры 0-15 могут быть индивидуально включены или выключены используя биты включения фильтров (FLTENn) в ECAN регистре (CiFEN1). Значение “n” в регистре соответствует индексу приемного фильтра.
Приемные фильтры 0-15 определяют идентификаторы, которые должны содержаться в приемных сообщениях для их содержания в приемном буфере. Каждый из этих фильтров состоит из двух регистров = один для стандартных идентификаторов и другой для расширенных идентификаторов. Эти регистры обозначаются как:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.