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

Если буфер сообщений выбран как передающий с установленным битом CiTRmnCON<RTRENn>, и приемный фильтр указывающий на этот буфер определяет сообщение, буфер сообщения будет обрабатывать с RTR, а не сохранять сообщение. Это только в случае когда указатель буфера приемного фильтра (FnBP) указывает на буфер сообщений сконфигурированный для передачи (TXENn=1).

7.2.4 Прием сообщений в буферы сообщений 8-14

Буферы сообщений 8-14 это приемные буферы. Указатель буфера фильтра (FnBP) определяет какой буфер сообщений используется.

7.2.3 Прием сообщений в буферы сообщений 15-31

Буферы сообщений 15-31 это приемные буферы и они только используются только как FIFO буферы, потому что  биты указателя буфера приемного фильтра (FnBP) могут указывать только на 16 адресов. Когда FnBP<3:0>=1111, результат какого ни будь фильтра будет записан в следующий доступный буфер расположенный  в FIFO.

7.2.5 Биты статуса приемного буфера

Приемный буфер содержит два сатус-бита, флаг заполнения буфера сообщения (RXFULn) и флаг переполнения буфера сообщений (RXOVFn). Эти статус-биты сгруппированы в регистре состояния заполнения буферов и состояния переполнения буферов.

CiRXFUL1<RXFULn>: приёмный буфер сообщения 0-15 полон

CiRXFUL2<RXFULn>: Приёмный буфер сообщения 16-31 полон

CiRXOVF1<RXOVFn>: Приёмный буфер сообщения 0-15 переполнен

CiRXOVF1<RXOVFn>: Приёмный буфер сообщения 16-31 переполнен

Когда принятое сообщение сохранено в буфер сообщений, соответствующий наполнений буфера (RXFULn) устанавливается, и генерируется прерывание приемного буфера (CiINTF<RBIF>). Если входящее сообщение принято фильтром, и буфер сообщений назначенный фильтру полон (т.е. RXFULn бит соответствующего буфера установлен в «1»), то устанавливается соответствующий бит переполнения RXOVFn (где «n» номер буфера сообщений связанного с этим буфером) и сгенерируется прерывание «приемный буфер переполнен» (CiINT<RBOVIF>). Сообщение будет утеряно.

Примечание: Если несколько фильтров соответствуют идентификатору принятого сообщения, и все буферы сообщений назначенные всем сравнивающим фильтрам полны, то установится бит RXOVFn соответствующего сравнивающего фильтра с наименьшим номером.

7.3 Функционирование буфера FIFO.

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

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

Рисунок 14 показывает как один из приемных фильтров настроен для того, чтобы принимать сообщения в FIFO (FnBP=1111). Начало FIFO установлено на буфер сообщений 5 (CiFCTRL<FSA>=00101), а конец FIFO установлен на буфер сообщений 11 (CiFCTRL<DMABS>=011)  распределяя 12 буферов сообщения

Рисунок 14. Приём сообщений в FIFO

1 – Указатель буфера приёмного фильтра «FnBP» должен быть «111», чтобы сохранить полученное сообщение в FIFO

2 – Стартовый адрес FIFO оределён в CIFCTRL <FSA>. В вышеупомянутом примере FSA <4:0> = “00101”

3 – Конечный адрес FIFO задаётся CiFCTRL <DMABS>. В вышеупомянутом примере DMABS<2:0>=”011”

7.3.1 Приём сообщения в буфер FIFO

Приемные фильтры помещают принятые сообщения в буфер FIFO когда FnBP<3:0>=1111. Это достигается при помощи простого указателя буфера, начинающегося с начала FIFO как определено выше, и последовательно инкрементируясь через набор буферов в пределах области FIFO. Когда достигнут конец буфер, то указатель снова переходит на стартовый буфер области FIFO.