МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 11

 

  Главная      Книги - Разные     МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019)

 

поиск по сайту            правообладателям  

 

   

 

   

 

содержание      ..     9      10      11      12     ..

 

 

 

МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 11

 

 

 

 

161 

 

 

Рисунок 18.4 – Удаленный запрос данных (стандартный формат) 

 
Имеются  только  два  отличия  содержимого  удаленного  запроса  от  сообщения 

данных:  

- бит RTR в удаленном запросе передается в рецессивном состоянии; 
- поле данных отсутствует (в сообщении не передается никаких данных, значение в 

поле DLC любое в пределах от 0 до 8).  

 
В  самом  маловероятном  случае,  когда  одновременно  формируется  удаленный 

запрос,  и  устройство  пытается  передать  данные  с  одинаковыми  идентификаторами, 
арбитраж  будет  выигран  устройством,  передающим  данные,  из-за  доминантного 
состояния бита RTR. 

Узел, который посылал запрос, получает данные немедленно. 
 

Сообщение об ошибке 

Формируется  любым  узлом,  который  обнаруживает  ошибку  на  шине.  Формат 

сообщения показан на рисунке 18.5. 

Сообщение об ошибке состоит из двух полей: поле разделителя ошибки и поле флага 

ошибки.  Возможны  два  типа  поля  флага  ошибки,  в  зависимости  от  вида  ошибки  узла, 
обнаружившего ее.  

Если  ошибку  обнаружил  активный  узел  (как  в  примере  на  рисунке  18.5),  тогда  он 

прерывает  передачу  текущего  сообщения,  формируя  флаг  активной  ошибки.  Флаг 
активной  ошибки  состоит  из  шести  последовательных  доминантных  битов,  которые 
нарушают  правила  бит-стаффинга  (правила  наполнения  и  передачи  битов  на  шине). 
Остальные  узлы  также  обнаруживают  ошибку  и  начинают  формировать  сообщение  об 
ошибке.  Таким  образом,  поле  флага  ошибки  может  содержать  от  6  до  12  доминантных 
битов  (сформированных  одним  узлом  или  более).  Поле  флага  ошибки  дополняется 
разделителем  ошибки,  состоящим  из  восьми  рецессивных  битов  и  позволяющим 
перезапускать  связь  с  шиной  после  обнаружения  ошибки.  После  перехода  шины  в 
нормальное  состояние  узлы  возобновляют  передачу  данных,  остановленный  узел 
повторяет передачу сообщения, переданного до этого с ошибкой. 

 

 

 

162 

 

 

Рисунок 18.5 – Сообщение об ошибке 

 
Если  ошибку  обнаружил  пассивный  узел,  тогда  он  формирует  флаг  пассивной 

ошибки,  состоящий  из  шести  последовательных  рецессивных  битов  и затем  разделитель 
ошибки.  Таким  образом,  сообщение  о  пассивной  ошибке  состоит  из  14  рецессивных 
битов.  Это  не  нарушает  правила  бит-стаффинга  на  шине  и  не  оказывает  влияния  на 
передачи  других  узлов.  Исключение  составляет  узел,  который  передает  данные  узлу, 
обнаружившему  ошибку.  В  этом  случае  правила  бит-стафинга  нарушаются  и  передача 
данных  прекращается.  После  передачи  пассивной  ошибки  узел  должен  ожидать  шесть 
последовательных рецессивных битов для восстановления связи с шиной. 

 

Сообщение о перезагрузке 

Формат  сообщения  о  перезагрузке  аналогичен  формату  сообщения  об  ошибке,  но 

может быть сформирован только, когда шина простаивает. 

Сообщение о перезагрузке показано на рисунке 18.6. 

 

 

 

Рисунок 18.6 – Сообщение о перезагрузке 

 
Разделитель перезагрузки состоит из восьми последовательных рецессивных битов.  
Узел может сформировать сообщение о перезагрузке в двух случаях: 
- между сообщениями обнаружен доминантный бит, что является ненормальным во 

время простоя шины; 

 

 

163 

- для задержки передачи нового сообщения. 
Узел может последовательно сформировать не более двух сообщений перезагрузки. 
Флаг перезагрузки состоит из шести последовательных доминантных битов. Другие 

узлы  обнаруживают  перезагрузку  и  начинают  формировать  ее  самостоятельно.  Поэтому 
на шине во время выполнения перезагрузки может быть до 12 доминантных битов.  

 

18.2

 

Структура и функционирование контроллера CAN 

В состав контроллера CAN входят два идентичных независимых узла CAN0 и CAN1, 

ОЗУ для хранения сообщений, которое является общим для узлов, и система управления.   
Контроллер CAN имеет следующие функциональные особенности: 

- соответствие ISO 11898; 
- функционирование согласно спецификации CAN 2.0b (активная версия); 
- отдельные управляющие регистры для каждого из двух узлов; 
- программируемая скорость передачи информации до 1 Мбит/с; 
- гибкий и полный контроль передачи сообщений и обработки ошибок. 
 
Контроллер  CAN  реализует  16  линий  прерываний  и  256  объектов  сообщений  для 

хранения  сообщений  и  их  параметров  в  ОЗУ.  Каждый  объект  сообщения  может  быть 
привязан к любому из узлов, сконфигурирован для передачи или приема как стандартных, 
так  и  расширенных  сообщений  и  удаленных  запросов.  Каждый  объект  имеет 
индивидуальную  маску  для  фильтрации  принимаемых  сообщений.  Объекты  сообщений 
могут  объединяться  в  классы,  с  разными  уровнями  приоритета,  могут  объединяться  для 
построения структур FIFO произвольных размеров (до 256 объектов в одной структуре). 
Кроме того, реализована возможность попарного соединения объектов для формирования 
шлюзов  для  автоматической  передачи  сообщений  между  узлами.  Параллельно  с 
вышеуказанными  свойствами  объекты  сообщений  могут  организовываться  в  списки  с 
постоянно  доступной  реорганизацией  (совместимость  с  TwinCan-устройствами,  которые 
не имеют списков).  

Структура контроллера CAN приведена на рисунке 18.7. 

 

 

 

Рисунок 18.7 – Общая структура контроллера CAN 

 

 

 

164 

Синхронизация 

Тактирующим сигналом контроллера CAN является сигнал Fclc (Fin), приходящий с 

генератора  тактовых  сигналов.  На  основе  этого  сигнала  посредством  программируемого 
дробного 

делителя 

частоты 

формируется 

внутренний 

сигнал 

Fcan 

(Fout), 

синхронизирующий  работу  контроллера  и  являющийся  базовым  синхросигналом  для 
передачи/приема сообщений по внешней шине CAN.  

 
Включение контроллера CAN 

По умолчанию, после сброса микроконтроллера контроллер CAN выключен. На это 

также указывает состояние флага DISS регистра CLC. Когда контроллер выключен, этот 
флаг установлен.  

Для включения контроллера CAN следует записать ноль в бит DISR регистра CLC. 

После этого флаг DISS сбросится. Рекомендуется проверять состояние флага DISS, перед 
началом программирования регистров контроллера, которые не доступны в выключенном 
состоянии. 

 

Выключение контроллера CAN 

Программно  можно  перевести  контроллер  CAN  в  режим  выключения  установкой 

бита DISR. Контроллер завершает все текущие операции, после чего устанавливает флаг 
DISS  и  отключает  внутреннее  тактирование,  в  связи  с  чем,  все  регистры  становятся 
недоступными для обращения. 

 

Простой шины 

Между передачами сообщений шина CAN находится в рецессивном состоянии. Для 

выполнения условий простой шины необходимо, чтобы было получено, как минимум, три 
рецессивных бита после завершения передачи/приема очередного сообщения. 

 

Анализ работы контроллера CAN 

Для  анализа  работы  контроллера  доступны  два  режима  –  общего  анализа  и 

внутренней петли. 

Режим  общего  анализа  включается  установкой  бита  CALM  регистра  NCR  узла  и 

позволяет осуществлять независимый мониторинг работы узла, не затрагивая шину CAN. 
В этом режиме сообщения данных и удаленные запросы отслеживаются без участия узла в 
операциях  на  шине.  Выходы  узла  находятся  в  рецессивном  состоянии.  Узел  может 
получать сообщения данных, сообщения удаленных запросов и сообщения об ошибках, но 
работа узла на передачу запрещена. Полученные сообщения данных/удаленных запросов 
остаются без подтверждения (бит подтверждения остается в рецессивном состоянии), но 
принимаются  и  сохраняются  (при  совпадении  идентификаторов)  в  соответствующих 
объектах  сообщений.  В  ответ  на  входящие  сообщения  не  выдается  подтверждение,  и  не 
генерируются  сообщения  об  ошибках.  На  удаленные  запросы  не  выдаются  сообщения 
данных,  а  сами  сообщения  данных  не  могут  быть  переданы  установкой  бита  запроса 
передачи  TXRQ  регистра  состояния  объекта  сообщения  MOSTAT.  Прерывания  после 
приема генерируются (если это разрешено) для всех принятых сообщений, не содержащих 
ошибок. 

Режим  внутренней  петли  включается  установкой  бита  LBM  регистра  NPCR  и 

позволяет  проводить  внутреннее  тестирование  контроллера  CAN,  а  также  отладку 
управляющей программы без доступа к внешней шине CAN. Внутренняя петля состоит из 
внутренней  шины  CAN  (внутри  контроллера  CAN)  и  переключателя  выбора  шины  для 
каждого  узла  (см.  рисунок  18.8).  С  помощью  переключателя  каждый  узел  CAN  может 
быть  подключен  либо  к  внутренней  шине  (режим  внутренней  петли),  либо  к  внешней 
шине (нормальный режим работы). Если выбран режим внутренней петли, то на внешнем 

 

 

165 

передающем выводе узла CAN поддерживается рецессивный уровень сигнала, а состояние 
принимающего вывода игнорируется. 

 

 

 

Рисунок 18.8 – Режим внутренней петли 

 
Если  оба  узла  CAN  функционируют  в  режиме  внутренней  петли,  они 

взаимодействуют друг с другом посредством внутренней шины CAN, не оказывая влияние 
на работу других модулей, функционирующих в нормальном режиме. 

 

Дробный делитель 

Дробный делитель позволяет генерировать частоту fout из входной тактовой частоты 

fin (SysCLK) путем программирования делителя посредством регистра FDR. 

 

 

 

Рисунок 18.9 – Схема дробного делителя 

 
Задаваемое значение входной частоты fin зависит от длительности передачи одного 

бита  информации  и  должно  быть  n-кратно  ей.  Поскольку  длительность  передачи  бита 
определяется количеством квантов времени (Ntq, см. далее), то для расчета частоты fin в 
МГц следует пользоваться формулой: 

 

fin = n×Ntq, 

(18.1) 

 

где   Ntq – количество квантов времени tq;  

n – целое число, начиная с 1 (для задания кратности).  
 
Дробный  делитель  делит  частоту  fin  путем  умножения  на  величину  1/val  или 

величину  1024/val  для  любого  val  от  0  до  1023,  выдавая  на  выходе  тактовый  сигнал 
fout (fcan). 

На рисунке 18.9 показана блок-схема дробного делителя. Логика дробного делителя 

работает по-разному, в зависимости от режима, задаваемого полем DM. 

 

 

166 

В  режиме  нормального  деления  (DM  =  01b)  делитель  работает  как  перегружаемый 

счетчик  с  шагом  инкрементирования,  равным  единице.  Состояние  счетчика  доступно 
посредством поля RESULT. Каждый раз, при переполнении (т. е. когда RESULT = 3FFh), 
формируется  импульс  сигнала  Fout,  после  чего  в  счетчик  загружается  значение  из  поля 
STEP. 

Выходная частота fout определяется по формуле 
 

fout = fin× 1/ (1024 – STEPd), 

(18.2) 

 

где STEPd – значение поля STEP в десятичном формате. 

 
Отсюда следует, что для получения частоты fout = fin, значение STEP должно быть 

равно 3FFh. На рисунке 18.10 показано формирование сигнала Fout при значении STEP = 
= 3FDh (1021d). 

 

 

 

Рисунок 18.10 – Формирование сигнала с частотой fout в нормальном режиме 

 
В  режиме  дробного  деления  (DM  =  10b)  делитель  работает  как  перезагружаемый 

счетчик,  но  шаг  инкрементирования  в  этом  случае  равен  значению  поля  STEP.  Если 
результат  инкрементирования  значения  RESULT  на  величину  STEP  превышает  3FFh, 
возникает  переполнение  счетчика,  формируется  импульс  сигнала  Fout,  после  чего  в 
счетчик загружается значение, на которое результат инкрементирования превысил 3FFh.  

Выходная частота fout определяется по формуле 
 

fout = fin× STEPd / 1024d . 

(18.3) 

 
В целом, режим дробного деления позволяет программировать частоту fout с более 

высокой точностью, чем нормальный режим, но сигнал может иметь джиттер периода, не 
превышающий одного периода fin, в связи с чем, не рекомендуется  использовать режим 
дробного деления при высоких скоростях передач. 

На  рисунке  18.11  показано  формирование  сигнала  Fout  при  значении  STEP  =  234h 

(564d). fout = fin× 564/1024 = 0,55 × fin 

 

 

 

Рисунок 18.11 – Формирование сигнала с частотой fout в режиме дробного деления 

 
Процесс выключения делителя начинается одновременно с возникновением запроса 

выключения контроллера CAN. 

 

 

167 

Контроллер сообщений 

Управляет  обменом  сообщениями  между  CAN  узлами  и  памятью  сообщений  и 

выполняет следующие функции: 

- фильтрация входящих сообщений для определения корректного объекта сообщения 

для сохранения полученных данных; 

-  определение  объекта  сообщения,  содержимое  которого  будет  передано  в  первую 

очередь (для каждого узла индивидуально); 

- передача содержимого объекта сообщения к CAN  узлу с параллельной вставкой в 

сообщение битов управления и состояния; 

- осуществление буферизации FIFO и функционирования шлюза; 
- объединение битов уведомления ждущих обработки сообщений. 

 
Управление прерываниями блока CAN 

На рисунке 18.12 показана структура формирования запроса на прерывание. 

 

 

 

Рисунок 18.12 – Структура формирования запроса на прерывание 

 
Событие,  по  которому  должен  быть  сгенерирован  запрос  на  прерывание, 

устанавливает  флаг прерывания и (если разрешено) формирует  запрос на прерывание на 
одной из 16 линий прерываний. Импульс запроса на прерывание генерируется независимо 
от  состояния  флага  прерывания.  Флаг  прерывания  может  быть  сброшен  программно, 
записью  нуля.  Если  к  одной  линии  прерываний  подключены  несколько  источников 
прерываний,  то  появление  импульса  от  любого  источника  сформирует  запрос  на 
прерывание. Логика 

управления 

прерываниями 

использует 

схему 

компрессии 

прерываний. 

Источниками прерываний являются: 
- CAN узлы (восемь источников – по четыре для каждого узла); 
- объекты сообщений (512 источников – по два для каждого объекта); 
- программное прерывание (источник – регистр MITR). 
 
Каждый  аппаратный  источник  прерывания  управляется  4  битами  указателя 

прерываний,  который определяет  для  него  одну  из  16  линий прерываний,  что  позволяет 
коммутировать  на  одну  линию  несколько  источников  прерываний.  На  рисунке  18.13 
представлена схема коммутации линий прерываний. 

Когда  объект  сообщения  n  генерирует  запрос  на  прерывание  по  окончании  приема 

или передачи сообщения, запрос передается на линию прерываний, выбранную в битовом 
поле RXINP или TXINP регистра MOIPR объекта сообщения n. Если количество объектов 
сообщений  больше,  чем  количество  линий  прерываний,  то  на  одну  линию  могут 
приходить  несколько  запросов  прерываний.  Для  разрешения  конфликтов  на  линиях 
прерываний в контроллере CAN предусмотрен механизм распределения приоритетов для 
объектов сообщений. 

 

 

168 

 

 

Рисунок 18.13 – Схема коммутации линий прерываний 

 

18.3

 

Узел контроллера CAN 

Каждый  узел  CAN  имеет  свою  собственную  логику  управления  и  выдачи 

информации  о  состоянии  и  может  быть  сконфигурирован  и  работать  независимо  от 
другого узла. 

Режим  конфигурации  включается  установкой  бита  CCE  регистра  NCR.  Режим 

конфигурации  позволяет  изменять  параметры  синхронизации  битов  и  состояния 
счетчиков ошибок. 

Конфигурация прерываний задается битами TRIE, ALIE и LECIE: 
- бит TRIE управляет разрешением прерывания после передачи сообщения; 
- бит ALIE управляет разрешением прерываний по ошибке; 
- бит LECIE управляет разрешением прерывания по коду последней ошибки. 
 
Регистр  NSR  отражает  текущее  состояние,  содержит  информацию  о  передачах  и 

ошибках узла. 

 

 

169 

Блок управления узлом 

Координирует работу: 
- разрешает/запрещает действия узла на шине; 
- разрешает/запрещает  и  генерирует  различные  события,  касающиеся  работы  узла 

(ошибка  на  шине,  успешное  завершение  передачи  сообщения),  которые  приводят  к 
формированию запросов на прерывания; 

- управляет счетчиком сообщений. 
 

Блок синхронизации битов 

Согласно стандарту ISO 11898 время передачи одного бита разделено на сегменты, 

которые,  в  свою  очередь,  составлены  из  целочисленных  отрезков  времени,  называемых 
квантами  времени  tq  (см.  рисунок  18.14).  Квант  времени  –  фиксированная  единица 
времени, получаемая из частоты синхронизации и делителя контроллера CAN. 

Сегмент синхронизации Tsync позволяет синхронизировать начало обмена данными 

между передатчиком и приемником. Длительность сегмента всегда  равна одному кванту 
времени. 

Сегмент  распространения  –  Tprop.  Используется  для  компенсации  физического 

времени запаздывания сигнала в пределах сети. Длительность сегмента рассчитывается с 
учетом  времени  прохождения  сигнала  от  передатчика  к  приемнику  и  обратно,  входной 
задержки компаратора и задержки выхода драйвера и может составлять от 1 до 8 квантов 
времени. 

 

 

 

Рисунок 18.14 – Структура одного бита 

 
Сегменты буфера фазы 1 и буфера фазы 2  – Tb1 и Tb2, расположенные до и после 

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

Точка  выборки – момент,  когда  читается  состояние  шины  для  определения 

принятого бита. Как правило, длительность временного интервала от начала бита до точки 
выборки составляет (60 – 70) % времени бита, в зависимости от системных параметров.  

Сегмент  распространения  и  сегмент  буфера  фазы  1  вместе  составляют  сегмент 

параметра  1 (Tseg1),  который  определяется  битовым  полем  TSEG1  регистра 
синхронизации  битов  NBTR  (может  быть  записан,  только  если  установлен  бит  CCE 
регистра NCR). Согласно стандарту ISO, минимальная длительность сегмента параметра 1 
должна составлять три кванта времени. 

Сегмент параметра 2 (Tseg2) определяется битовым полем TSEG2 регистра NBTR и 

охватывает  сегмент  буфера  фазы  2.  Минимальная  длительность  сегмента  параметра  2 
составляет два кванта времени. 

Согласно  стандарту  ISO,  минимальная  длительность  одного  бита,  получающаяся 

сложением сегментов Tsync, Tseg1 и Tseg2 не должна быть менее 8 квантов времени.  

Максимальная длительность бита – 25 квантов времени. 

 

 

170 

П р и м е ч а н и е   –  Минимальное  номинальное  время  передачи  одного  бита 

составляет 1 мкс, что соответствует скорости передачи 1 Мбит/с. 

 
Формулы вычисления значений сегментов и времени одного бита Tbit: 
- при DIV8 = 0 значение кванта времени  
 

tq= (BRP + 1) / fout; 

(18.4) 

 

- при DIV8 = 1 значение кванта времени  
 

tq = 8 × (BRP + 1) / fout; 

(18.5) 

 

- Tsync = 1 × tq; 
- Tseg1 = (TSEG1 + 1) × tq ≥ 3tq; 
- Tseg2 = (TSEG2 + 1) × tq ≥ 2tq; 
- Tbit = Tsync + Tseg1 + Тseg2 ≥ 8tq. 
 
Чтобы  компенсировать  смещение  фазы  между  частотами  генераторов  различных 

узлов  шины,  каждое  устройство  должно  синхронизироваться  по  фронту  смены  уровня 
сигнала  на  шине  от  рецессивного  к  доминантному.  Как  только  фронт  обнаруживается, 
логика  синхронизации  сравнивает  его  текущее  положение  с  ожидаемым  и  выполняет 
настройку значений параметров Tseg1 и Тseg2. 

Контроллер  CAN  использует  два  механизма  синхронизации  –  аппаратный  и 

ресинхронизацию (синхронизация с восстановлением тактовых интервалов). 

Аппаратная синхронизация выполняется по каждому фронту смены уровня сигнала 

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

Ресинхронизация  выполняется  автоматическим  удлинением  сегмента  Tseg1  или 

укорачиванием сегмента Tseg2. Максимальное значение изменения сегментов колеблется 
в пределах от 1 до 4 квантов времени. Синхронизация выполняется только при появлении 
фронта смены уровня сигнала на шине от рецессивного к доминантному. Фиксированное 
значение  максимального  числа  последовательных  бит  одинаковой  полярности 
гарантирует  своевременное  восстановление  синхронизации.  Смещение  фазы  фронта 
смены  уровня  сигнала  на  шине  отслеживается  относительно  сегмента  cинхронизации  и 
измеряется в квантах времени. 

Если  величина  фазового  смещения  меньше  или  равна  запрограммированному 

значению  ширины  перехода  ресинхронизации  Tsjw,  выполняется  аппаратная 
синхронизация. 

Если  величина  смещения  фазы  больше,  чем  Tsjw,  а  фазовое  смещение 

положительно, то удлиняется сегмент Tseg1, в случае отрицательного фазового смещения 
укорачивается сегмент Tseg2. 

Значение Tsjw определяется полем SJW регистра NBTRx по формуле 

 

Tsjw= (SJW + 1) × tq . 

(18.6) 

 

Помимо прочего, должны соблюдаться следующие правила: 
Tseg1 ≥ Tsjw + Tprop и Tseg2 ≥ Tsjw. 
Соотношения  между  максимальным  отклонением  частоты  fout  и  сегментами 

буферов фаз и шириной перехода ресинхронизации следующие: 

- Δfout ≤ T/2 × (13 × Tbit – Tb2); 
- Δfout ≤ Tsjw / 20 × Tbit, 

 

 

171 

где    T – меньшее из Tb1 и Tb2.  

В итоге: 
- Tsync составляет 1 квант времени; 
- Tprop – от 1 до 8 квантов времени; 
- Tb1 – от 1 до 8 квантов времени; 
-  Tb2  –  выбирается  равным  двум  квантам  времени  или  равным  сегменту  Tb1,  если 

его значение более двух квантов времени; 

- Tsjw  может  составлять  максимально  4  кванта  времени,  однако,  в  типовых 

приложениях достаточно 1. 

Корректные  значения  параметров  синхронизации  битов  должны  быть  записаны  в 

регистр  NBTR  (доступен,  если  установлен  бит  CCE)  до  окончания  инициализации  (до 
сброса бита INIT регистра NCR), т. е. до начала работы CAN узла. 

 

Процессор потока битов 

Процессор  потока  битов  формирует  (на  основе  содержимого  объектов  сообщений) 

сообщения данных и удаленные запросы непосредственно перед отправкой на шину CAN. 
Процессор  потока  управляет  генератором  CRC  (генератор  контрольной  суммы)  и 
добавляет контрольную сумму к сообщению. После вставки битов начала (SOF) и конца 
(EOF)  сообщения,  процессор  потока  начинает  передачу  сообщения  по  правилам 
арбитража  шины  CAN.  В  течение  всего  времени  передачи  сообщения  процессор  потока 
битов  ведет  мониторинг  шины.  Если  обнаруживается  несовпадение  текущего 
(определяемого  мониторингом)  и  ожидаемого  (выдаваемого  CAN  узлом)  уровня 
напряжения на шине, генерируется ошибка и соответствующий ей запрос на прерывание. 
Код возникшей ошибки отражается в битовом поле LEC регистра NSR. 

Корректность  получаемых  данных  проверяется  и  подтверждается  или  не 

подтверждается  кодом  CRC.  В  случае  отсутствия  подтверждения  возникает  ошибка, 
генерируется  запрос  на  прерывание  и  код  ошибки  выставляется  в  регистре  NSR.  Кроме 
этого, на шину выдается сообщение об ошибке.  

После  получения  сообщения,  не  содержащего  ошибок,  и  разбиения  его  на 

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

 

Блок обработки ошибок 

Блок  обработки  ошибок  предназначен  для  выявления  ошибок  в  работе  устройств 

узла.  В  составе  блока  есть  два  счетчика:  счетчик  ошибок  приема  (поле  REC  в  регистре 
NECNT)  и  счетчик  ошибок  передачи  (поле  TEC).  Инкрементированием  и 
декрементированием счетчиков управляет процессор потока битов.      

Если процессор потока битов сам выявляет ошибку в процессе передачи, то счетчик 

TEC  инкрементируется  на  8.  Инкрементирование  на  1  происходит,  если  об  ошибке 
сообщено  внешним  CAN-устройством  путем  генерирования  сообщения  об  ошибке. 
Направление  передачи  с  ошибочным  сообщением  и  узел,  сообщивший  об  ошибке 
передачи,  указывают  на  соответствующие  узлы  CAN  в  регистрах  NECNT,  что 
используется для анализа ошибки.  

В зависимости от значений счетчиков ошибок узел CAN может находиться в одном 

из трех состояний: 

- активной ошибки; 
- пассивной ошибки; 
- отключен от шины. 
 

 

 

172 

Узел находится в состоянии активной ошибки, если значение каждого из счетчиков 

ошибок меньше 128. Узел в состоянии активной ошибки присоединен к шине и посылает 
флаг активной ошибки при обнаружении ошибок. 

Узел  находится  в  состоянии  пассивной  ошибки,  если  значение  хотя  бы  одного  из 

счетчиков ошибок больше или равно 128. Узел подключен к шине, но при обнаружении 
ошибок  посылает  флаг  пассивной  ошибки.  После  передачи  узел  в  состоянии  пассивной 
ошибки будет ждать инициализации дальнейшей передачи.  

Узел находится в состоянии отключения от шины, если  значение счетчика ошибок 

TEC больше или равно 256. О том, что CAN узел находится в состоянии отключения от 
шины, сигнализирует флаг BOFF регистра NSR. Узел в состоянии отключения от шины не 
может работать с шиной (выходные передатчики отключены).  

Флаг EWRN регистра NSR устанавливается, когда хотя бы один из счетчиков достиг 

или превысил лимит ошибок, определенный в битовом поле EWRNLVL регистра NECNT. 
Как только значения обоих счетчиков перестанут превышать лимит ошибок, флаг EWRN 
сбросится. 

 

Счетчик сообщений 

Счетчик сообщений может использоваться для получения информации о завершении 

передачи/приема  сообщения  соответствующего  узла  CAN.  Подсчет  сообщений 
осуществляется 16 разрядным счетчиком, который управляется регистром NFCR. Битовые 
поля  CFMOD  и  CFSEL  определяют  режим  работы  и  событие  для  инкрементирования 
счетчика. 

Каждый 

узел 

CAN 

имеет 

в 

своем 

составе 

16-разрядный 

счетчик 

сообщений/синхросчетчик,  который  подсчитывает  количество  принятых  и  переданных 
сообщений. Битовое поле CFSEL определяет один из трех режимов работы счетчика. 

В режиме подсчета сообщений после успешной передачи и/или приема сообщения, 

содержимое  счетчика  копируется  в  битовое  поле  CFCVAL  регистра  MOIPR  объекта 
сообщения  n,  участвующего  в  пересылке  данных.  После  чего  счетчик  сообщений 
инкрементируется. 

 

Прерывания узла CAN 

Коммутация линий запросов прерываний показана на рисунке 18.15. 

 

 

 

Рисунок 18.15 – Прерывания CAN узла 

 

 

173 

Узел может генерировать запросы на прерывания в случае: 
- успешной передачи/приема сообщения; 
- обнаружения кода последней ошибки; 
- переполнения счетчика сообщений; 
- состояния  ALERT  (состояние,  возникающее,  когда  хотя  бы  один  из  счетчиков 

ошибок узла достиг значения своего лимита, изменяется состояние «отключен от шины», 
возникает ошибка длины списка или ошибка списка объектов). 

 
После  каждой  успешной  передачи  или  успешного  приема  сообщения  генерируется 

(если  разрешено  соответствующими  битами  TXOK  и  RXOK)  прерывание.  Битовое  поле 
TRINP регистра NIPR задает одну (из 16) линию прерывания. 

Прерывание  узла  при  возникновении  кода  последней  ошибки  формируется  (если 

разрешено битом LECIE), если после модификации поля LEC его значение больше нуля. 
Битовое поле LECINP задает линию прерывания. 

Прерывание  узла  при  переполнении  счетчика  сообщений  генерируется,  если  оно 

разрешено битом CFCIE регистра NFCR. Битовое поле CFCINP задает линию прерывания. 

Прерывание  ALERT  может  быть  сформировано  (если  разрешено  битом  ALERT) 

любым из следующих событий: 

- изменение состояния бита BOFF; 
- изменение состояния бита EWRN; 
- ошибка длины списка, которая также выставляет бит LLE; 
- ошибка элемента списка, которая также выставляет бит LOE; 
- бит INIT выставлен аппаратно. 
 
Битовое поле ALINP задает линию прерывания. 
В  дополнение  к  аппаратным  прерываниям  есть  возможность  программного 

генерирования  прерываний  с  использованием  регистра  прерываний  MITR.  Запись 
единицы  в  n-й  разряд  битового  поля  IT  генерирует  сигнал  запроса  прерывания  на 
соответствующей ему n-ой линии прерываний (одной из 16). Установка нескольких битов 
приводит  к  параллельному  генерированию  запросов  прерываний  на  соответствующих 
установленным битам линиях прерываний. 

 

18.4

 

Объекты сообщений 

Регистры управления и состояния объектов сообщений 
В состав каждого объекта сообщения входят девять 32-разрядных регистров: 
-  управления  и  состояния  –  MOCTR  (только  запись)  и  MOSTAT  (только  чтение), 

доступные по одному адресу; 

- арбитража – MOAR; 
- данных – MODATAH и MODATAL; 
- маски – MOAMR; 
- указателя прерываний – MOIPR; 
- указателя FIFO/шлюза – MOFGPR; 
- управления функционированием – MOFCR. 
 
Расположение регистров представлено на рисунке 18.16, где для примера взят пятый 

объект сообщения. 

 

 

 

174 

 

 

Рисунок 18.16 – Структура памяти регистров 

 
Объекты сообщений контроллера CAN могут быть организованы в восемь  списков 

(см. рисунок 18.17).  

 

 

 

Рисунок 18.17 – Списки контроллера CAN 

 
Каждый  объект  сообщения  может  быть  добавлен  в  один  из  списков.  Каждый  узел 

CAN  имеет  свой  список  и  соответствующий  регистр  списка.  Регистр  LIST1  отражает 
состояние списка №1 узла CAN0, регистр LIST2 – списка №2 узла CAN1.  

 
П р и м е ч а н и е   –  Узел  может  оперировать  только  с  теми  объектами  сообщений, 

которые занесены в принадлежащий ему список. 

 
Положение  объекта  сообщения  n  в  списке  определяется  посредством  регистра 

MOSTAT,  который  содержит  указатели  на  предшествующий  ему  и  следующий  за  ним 
элементы  списка  (объекты).  Нераспределенные  между  узлами  CAN  объекты  сообщений 
по  умолчанию  организуются  в  отдельный  список  №0,  состояние  которого  отражается  в 
регистре LIST0. Остальные пять списков с номерами от 3 до 7 являются свободными (не 
принадлежат ни одному узлу) и имеют соответствующие регистры LIST3 – LIST7. 

 

 

 

175 

П р и м е ч а н и е  – Объекты сообщений, распределенные в списки с 3 по 7, не могут 

быть использованы узлами CAN. 

 
Механизмы  FIFO  и  шлюза  (см.  далее)  оперируют  с  объектами  сообщений 

независимо  от  их  распределения  по  спискам,  что  дает  возможность  работы  со  всеми 
восемью списками. Следовательно, при использовании механизмов FIFO и шлюза следует 
внимательно следить за содержимым списков. 

На рисунке 18.18 представлен вариант, когда объекты сообщений с номерами 3, 5 и 

16  занесены  в  список  №  2,  принадлежащий  узлу  CAN1.  Состояние  списка  отражено  в 
регистре LIST2. 

 

 

 

Рисунок 18.18 – Пример списка объектов сообщений 

 

Значение поля BEGIN регистра LIST2 указывает на первый элемент списка (объект 

сообщения  5).  Значение  поля  END  указывает  на  последний  элемент  списка  (объект 
сообщения  3).  Количество  элементов  списка  (количество  объектов  сообщений  в  списке) 
отражается в поле SIZE (значение SIZE всегда на единицу меньше количества элементов 
списка).  Бит  EMPTY  является  индикатором  заполнения  списка.  Если  список  пуст,  бит 
EMPTY установлен, в противном случае бит сброшен. 

Каждый  объект  сообщения  содержит  номер  списка  (поле  LIST),  к  которому  он 

относится,  а  также  указатели  PNEXT  и  PPREV  на  следующий  по  списку  объект 
сообщения и предшествующий, соответственно. Поле PPREV первого по списку объекта 
сообщения  должно  указывать  на  этот  же  объект.  Поле  PNEXT  последнего  по  списку 
объекта сообщения должно указывать на этот же объект. 

На  рисунке  18.18  указатель  PPREV  пятого  объекта  сообщения  (первого  в  списке) 

имеет значение 5h, а указатель PNEXT третьего объекта сообщения (последнего в списке) 
имеет значение 3h. Значение поля LIST всех трех объектов сообщений равно 2h. 

Объект  сообщения,  у  которого  LIST = 0h  относится  к  нулевому  списку 

нераспределенных  объектов.  После  сброса  все  объекты  сообщений  считаются 
нераспределенными.  По  умолчанию,  порядок  элементов  списка  № 0  следующий:  объект 
сообщения (n – 1) является предыдущим объекта сообщения n, а объект сообщения (n + 1) 
– следующим. 

Для просмотра структуры списка объектов сообщений узла достаточно обратиться к 

соответствующим регистрам LIST1/LIST2 и MOSTAT. 

Структура  списка  управляется  и  изменяется  посредством  контроллера  списка, 

который,  в  свою  очередь,  управляется  панелью  команд,  основное  назначение  которой  – 
упрощение  внесения  изменений  в  структуру  списка,  отслеживание  этих  изменений  и 
проверка их корректности с помощью регистра PANCTR. 

 

 

176 

Панель  команд  запускается  записью  соответствующей  команды  в  битовое  поле 

PANCMD. До записи кода команды должны быть записаны соответствующие аргументы 
команды в битовые поля PANAR1 и PANAR2. 

 
П р и м е ч а н и е   –  Запись  новых  значений  в  поля  PANAR1  и  PANAR2  не  изменяет 

сразу их содержимого. Новые значения сначала попадают в специальный теневой регистр. 
Далее,  одновременно  с  записью  кода  команды  в  поле  PANCMD,  новые  значения  из 
теневого регистра переносятся в поля PANAR1 и PANAR2. 

 
С записью корректного кода команды выставляется флаг BUSY, и в дальнейшем все 

попытки  записи  в  регистр  PANCTR  игнорируются.  Флаг  BUSY  остается  активным,  а 
панель команд заблокированной до тех пор, пока не завершится выполнение записанной 
команды. 

После  сброса  микроконтроллера  контроллер  списка  формирует  список  №  0 

нераспределенных объектов сообщений. Во время этой операции флаг BUSY установлен, 
и  все  обращения  к  объектам  сообщений  запрещены.  По  окончании  этой  операции  флаг 
BUSY сбрасывается, и объекты становится доступными. 

В случае появления команды динамического распределения, по которой какой-либо 

элемент  забирается  из  списка  №  0  и  переносится  в  другой  указанный  список,  наряду  с 
битом  BUSY,  устанавливается  бит  RBUSY.  Это  указывает  на  то,  что  значения  битовых 
полей PANAR1 и PANAR2 будут обновлены контроллером списка следующим образом: 

- номер  объекта  сообщения,  переносимого  из  списка  №  0  нераспределенных 

объектов сообщений, записывается в PANAR1; 

- если установлен бит ERR (седьмой бит поля PANAR2), значит, список № 0 пуст и 

выполнение команды завершается; если бит ERR сброшен – список № 0 не пуст и команда 
выполняется. 

 
Результаты  выполнения  команды  динамического  распределения  записываются  до 

того, как контроллер списка начнет процесс распределения. Как только результаты станут 
доступны,  бит  RBUSY  сбрасывается.  Это  позволяет  пользователю  запрограммировать 
настройки желаемого объекта сообщения, в то время как контроллер списка распределяет 
объекты. Во время операций со списками доступ к объектам сообщений не запрещен, но 
следует помнить, что любой доступ к регистрам объектов сообщений в течение процесса 
распределения объектов вносит задержку (в процесс), равную длительности доступа. 

Код команды «нет операции» автоматически записывается в битовое поле PANCMD. 
Новая команда может быть записана в любое время, когда бит BUSY сброшен. 
Все битовые поля регистра PANCTR,  исключая биты BUSY и RBUSY, могут  быть 

записаны  программно,  что  делает  возможным  сохранять  и  восстанавливать  значения 
регистра  PANCTR,  если  панель  команд  используется  независимой  подпрограммой 
обработки  прерываний.  Если  возникает  такая  ситуация,  то  любые  задачи,  которые 
используют  панель  команд  и  которые  могут  прерывать  выполнение  других  задач,  тоже 
использующих панель команд, будут опрашивать состояние флага BUSY. До тех пор, пока 
флаг  BUSY  будет  оставаться  установленным,  содержимое  регистра  PANCTR  будет 
сохранено  в  соответствующей  области  памяти  до  операции  восстановления.  Как  только 
подпрограмма  обработки  прерываний  закончится,  содержимое  регистра  PANCTR  будет 
восстановлено. 

До  того,  как  объект  сообщения,  занесенный  в  список  активного  узла  CAN,  будет 

перенесен  на  другую  позицию  этого  же  списка  или  перенесен  в  другой  список,  бит 
MSGVAL регистра MOSTATn объекта сообщения n должен быть очищен.  

   

 

 

 

 

 

 

 

содержание      ..     9      10      11      12     ..