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