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

C1FMSKSEL1bits.F2MSK=0x1;

/* Конфигурация регистра маски фильтра 1 чтобы маскировать EID<5:0>

Mask Bits (29-bits) : 0b0 0000 0000 0000 0000 0000 0011 1111

SID<10:0> : 0b00000000000 ..SID<10:0> or EID<28:18>

EID<17:16> : 0b00 ..EID<17:16>  EID<15:0> : 0b0000000000111111 ..EID<15:0> */

C1RXM1SIDbits.SID = 0x0;

C1RXM1SIDbits.EID = 0x0;

C1RXM1EIDbits.EID = 0x3F;

/* Конфигурация приёмного фильтра 2 чтобы соответствовать расширенному

 идентификатору (29-bits) : 0b1 1110 0000 0011 1111 0101 10xx xxxx

SID<10:0> : 0b11110000000 ..SID<10:0> or EID<28:18>

EID<17:16> : 0b11 ..EID<17:16>    EID<15:0> : 0b1111010110xxxxxx ..EID<15:0> */

C1RXF2SIDbits.SID = 0x780;

C1RXF2SIDbits.EID = 0x3;

C1RXM2EIDbits.EID = 0xF680;

/* Приёмный фильтр 2 для расширенного идентификатора */

C1RXM1SIDbits.MIDE = 0x1;

C1RXF2SIDbits.EXIDE= 0x1;

/* Приёмный фильтр 2 для использования буфера сообщений 5 для хранения сообщений */

C1BUFPNT1bits.F2BP = 0x6;

/* активизация фильтра 2 */

C1FEN1bits.FLTEN1=0x1;

7.2  Выбор буфера и DMA передатчика.

Как показано на рисунке 13, если условия фильтрации совпали, DMA передатчик генерирует запрос ECAN модулем  к контроллеру DMA для автоматического копирования принятого сообщение в назначенный пользователем буфер сообщений в области DMA RAM.  Модуль ECAN поддерживает до 32 буферов сообщений. Пользователь в программе может использовать биты размера DMA буфера DMABS<2:0>  в регистре управления ECAN FIFO (CiFCTRL<15:13>) для выбора 4, 6, 8, 12, 16, 24 или 32 буферов сообщений. Выбор индекса приемного буфера (и следовательно  DMA RAM  адреса в который сообщение будет записано DMA контролером) зависит от того какой фильтр пропустил входящий идентификатор и от настроек пользователя. DMA контролер перемещает данные в назначенную адресом область в DMA RAM и генерирует  прерывание DMA после передачи определяемого пользователем количества слов. Смотрите разделу 8 «Конфигурация DMA контролера» для более подробной информации об конфигурации DMA канала для передачи данных ECAN.

Рисунок 13. Выбор буфера и передатчика DMA

7.2.1 Выбор буфера.

Есть четыре регистра которые  выбирают какой буфер сообщений хранит принятые сообщения от приемных фильтров 0-15

CiBUFPNT1<FnBP>: указатель буфера от приемного фильтра 0-3

CiBUFPNT2<FnBP>: указатель буфера от приемного фильтра 4-7

CiBUFPNT3<FnBP>: указатель буфера от приемного фильтра 8-11

CiBUFPNT4<FnBP>: указатель буфера от приемного фильтра 12-15

Когда принятый идентификатор сообщения равен одному из приемных фильтров, внутренняя логика ищет указатель буфера (FnBP<3:0>) и использует его как адрес для соответствующего буфера сообщений. Адрес предусмотрен DMA каналом для периферии. Поэтому DMA  канал должен быть сконфигурирован в режим косвенной адресации к периферии.

Значение для FnBP<3:0> принимает следующие значения:

0000       Сообщение принимается в буфер сообщений 0

0001       Сообщение принимается в буфер сообщений 1

……

1110  Сообщение принимается в буфер сообщений 14

1111  Сообщение принимается в FIFO буфер сообщений

Примечание: буферизация мультисообщений может быть использована пользовательским приложением, формируя несколько приёмных фильтров с тем же самым значением. Поэтому принимаемые сообщения могут соответствовать множеству фильтров и модуль ECAN будет назначать сообщениям нижний номер фильтра, указывающий на пустой буфер

7.2.2 Прием сообщений в буферы сообщений 0-7

Буферы сообщений 0-7 могут быть сконфигурированы для передачи или приема CAN сообщений используя бит TXENn в регистре CiTRmnCON<7>. Указатель буфера приемного фильтра (FnBP) выбирает один из буферов сообщений для хранения принятых сообщений, если он был настроен на приёмный буфер (TXENm=0).