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).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.