Модуль ECAN для dsPIC. Типичная сеть ECAN. 16 приемных фильтров для фильтрования сообщения, страница 19

Могут быть специальные случаи, когда сообщение содержит меньше битов данных чем настроено в DeviceNet фильтре.

Случай 1 - Если DNCNT <4:0> больше чем 18, указывая, что пользователь выбрал больше битов, чем общее число битов EID, фильтр сравнения завершается 18-ым битом данных (бит 6 байта данных 2). Если SID и все 18 битов данных соответствуют, то сообщение принимается.

Случай 2 - Если DNCNT <4:0> больше чем 16, и у полученного сообщения код длины данных (DLC) - 2 (показывает что всего 2 байта полезной информации), сравнение фильтра заканчивается  16-ым битом данных (бит 0 из байта данных 1). Если SID и все 16 бит совпадают, то сообщение принимается.

Случай 3 - Если DNCNT <4:0> больше чем 8, и полученное сообщение имеет DLC = 1 (указывая что всего 1 полезный байт в фрейме), сравнения фильтра завершается 8-ым битом данных (бит 0 байта данных 0). Если SID и все 8 бит совпали, то сообщение считается принятым.

Случай 4 - Если DNCNT <4:0> больше чем 0, и полученное сообщение имеет DLC = 0, т.е. указывая на отсутствие полезный байтов в фрейме, сравнение фильтра заканчивается со стандартным идентификатором. Если SID соответствует, сообщение принято.

21.8 Конфигурация контроллера DMA

ECAN модуль использует часть DMA RAM для буфера сообщений, как для приёма так и для отправки CAN сообщений. Число буферов сообщений используемых ECAN модулем отражается в битах (DMABS <2:0>) в регистре управления (CiFCTRL<15:13>). Регистр DMAxSTA в DMA контролере определяет начало области CAN буфера. DMA контролер перемещает данные между ECAN и DMA буферами сообщений без вмешательства CPU.

DMA контролер предусматривает восемь каналов передачи данных между DMA RAM и периферией. Два DMA канала необходимы для поддержки приема и передачи СAN сообщений. Каждый канал имеет свой регистр запроса (DMAxREQ) который назначает событие для передачи сообщений.

Событие

IRQ значение для инициализации регистра DMAxREQ

ECAN1 Приём

34

ECAN1 Передача

70

ECAN2 Приём

55

ECAN2 Передача

71

Для примера на рисунке 17, показано использование DMA канал 4, чтобы получить доступ к буферам ECAN.

Рисунок 17. Использования памяти буфера сообщения

8.1 Функционирование DMA при передаче

Пользователь выбирает сообщения для передачи установкой битов запроса отправки сообщения (TXREQ) регистра CiTRmnCON<3>. ECAN контролер использует DMA для чтения сообщений из буфера сообщений и передачи сообщений. ECAN модуль генерирует прерывание передачи данных, для запуска цикла DMA. В ответ на прерывание, канал DMA который настроен на передачу ECAN сообщений читает из буфера сообщений в DMA RAM и сохраняет сообщение в регистре ECAN передаваемых данных (CiTXD). Восемь слов передаются для каждого сообщения, передаваемого ECAN контролером. Для большей информации смотреть Раздел 2 «Форматы CAN сообщений». Программный код для настройки DMA канала чтобы передать сообщение по ECAN1 показана на примере 6.

Пример 6. DMA канал 0 сконфигурирован для передачи по ECAN1

/* Размер передаваемых данных: слово */

DMA0CONbits.SIZE = 0x0;

/* направление передачи: DMARAM к периферии */

DMA0CONbits.DIR = 0x1;

/* Режим адресации  DMA: периферийная косвенная адресация */

DMA0CONbits.AMODE = 0x2;

/* Операционный режим: Continuous, Ping-Pong режим отключён */

DMA0CONbits.MODE = 0x0;

/* связать ECAN1событие передачи с для DMA канала 0 */

DMA0REQ = 70;

/* Установить число  DMATransfer для  ECAN сообщение как 8 слов */

DMA0CNT = 7;

/* Адреспериферии: ECAN1 Transmit Register */

DMA0PAD = &C1TXD;

/* Start Address Offset for ECAN1 Message Buffer 0x0000 */

DMA0STA = 0x0000;

/* Активизация канала: Активизировать DMA канал 0 */

DMA0CONbits.CHEN = 0x1;

/* Активизация канала прерывания: Активировать прерывание DMA канал 0  */

IEC0bitsDMA0IE = 1;