Регистры управления и состояния eCAN
Регистры eCAN, перечисленные в таблице 1, используются CPU для конфигурации и управления контроллером CAN при работе с сообщениями.
Таблица 1 – Регистры eCAN
Название регистра | Адреса eCAN-A | Адреса eCAN-B | Разрядность (х32) | Описание |
CANME | 0x6000 | 0x6200 | Регистр разрешения Mailbox | |
CANMD | 0x6002 | 0x6202 | Регистр направления | |
CANTRS | 0x6004 | 0x6204 | Регистр установки запроса передачи | |
CANTRR | 0x6006 | 0x6206 | Регистр сброса запроса передачи | |
CANTA | 0x6008 | 0x6208 | Регистр подтверждения приема | |
CANAA | 0x600A | 0x620A | Регистр подтверждения передачи | |
CANRMP | 0x600C | 0x620C | Регистр ожидания принимаемого сообщения | |
CANRML | 0x600E | 0x620E | Регистр потери принятого сообщения | |
CANRFP | 0x6010 | 0x6210 | Регистр ожидания кадра удаленного запроса данных | |
CANGAM | 0x6012 | 0x6212 | Регистр маска глобального приема | |
CANMC | 0x6014 | 0x6214 | Регистр главного управления | |
CANBTS | 0x6016 | 0x6216 | Регистр конфигурации синхронизации | |
CANES | 0x6018 | 0x6218 | Регистр ошибок и состояния | |
CANTEC | 0x601A | 0x621A | Регистр счетчика ошибок передачи | |
CANREC | 0x601C | 0x621C | Регистр счетчика ошибок приема | |
CANGIF0 | 0x601E | 0x621E | Регистр флага 0 глобальных прерываний | |
CANGIM | 0x6020 | 0x6220 | Регистр глобальной маски прерываний | |
CANGIF1 | 0x6022 | 0x6222 | Регистр флага 1 глобальных прерываний | |
CANMIM | 0x6024 | 0x6224 | Регистр маски прерываний Mailbox | |
CANMIL | 0x6026 | 0x6226 | Регистр уровня прерываний Mailbox | |
CANOPC | 0x6028 | 0x6228 | Регистр управления защитой перезаписи | |
CANRIOS | 0x602A | 0x622A | Регистр управления входами eCAN | |
CANTIOS | 0x602C | 0x622C | Регистр управления выходами eCAN | |
CANTSC | 0x602E | 0x622E | Счетчик временной метки (reserved в режиме SCC) | |
CANTOC | 0x6030 | 0x6230 | Управление ограничением времени (reserved в режиме SCC) | |
CANTOS | 0x6032 | 0x6232 | Состояние ограничения времени (reserved в режиме SCC) |
Работа с сообщениями
eCAN-модуль имеет 32 различных Mailbox, каждый из которых имеет свою индивидуальную приемную маску и может быть настроен на прием или передачу.
Сообщение Mailbox содержит:
- 29-разрядный идентификатор сообщения;
- регистр управления сообщением;
- до 8 байтов данных;
- 29-разрядная приемная маска;
- 32-разрядная временная метка;
- 32-разрядное значение ограничения времени.
Соответствующие биты регистров состояния и управления позволяют управлять сообщениями.
Mailbox
Mailbox – это область оперативной памяти, где сообщения CAN сохраняются после того, как они приняты, или прежде, чем они будут отправлены.
CPU может использовать области оперативной памяти Mailbox, не используемые для хранения сообщений, как обычную память.
Каждый Mailbox содержит:
1) Идентификатор сообщения:
- 29-разрядов для расширенного идентификатора;
- 11-разрядов для стандартного идентификатора;
2) Бит расширения идентификатора, IDE (MSGID,31);
3) Бит установки приемной маски, AME (MSGID,30);
4) Бит автоматического ответа, AAM (MSGID,29);
5) Уровень приоритетной передачи, TPL (MSGCTRL,12-8);
6) Бит удаленного запроса данных, RTR (MSGCTRL,4);
7) Код длины данных, DLC (MSGCTRL,3-0);
8) Поле данных до 8 байтов.
Каждый из Mailbox может работать в режиме одного из четырех типов сообщения (см. таблицу 2). Прием и передача сообщений необходимы для обмена данными между передающим узлом и многочисленными узлами-приемниками, тогда как сообщения запроса и подтверждения используются для поддержания взаимосвязи на шине.
Таблица 2 – Конфигурация сообщений
Виды сообщений | Регистр направления Mailbox (CANMD) | Бит установки режима автоматического ответа (AAM) | Бит установки запроса данных (RTR) |
Передача сообщения | |||
Прием сообщения | |||
Сообщение-запрос | |||
Сообщение-ответ |
Таблица 3 показывает расположение байтов Mailbox eCAN-A в ОЗУ.
Таблица 3 – Расположение байтов Mailbox eCAN-A в ОЗУ
Mailbox | MSGID MIDL-MIDH | MSGCTRL MCF-Rsvd | MDL MDL_L-MDL_H | MDH MDH_L-MDH_H |
6100-6101h | 6102-6103h | 6104-6105h | 6106-6107h | |
6108-6109h | 610A-610Bh | 610C-610Dh | 610E-610Fh | |
6110-6111h | 6112-6113h | 6114-6115h | 6116-6117h | |
6118-6119h | 611A-611Bh | 611C-611Dh | 611E-611Fh | |
6120-6121h | 6122-6123h | 6124-6125h | 6126-6127h | |
6128-6129h | 612A-612Bh | 612C-612Dh | 612E-612Fh | |
6130-6131h | 6132-6133h | 6134-6135h | 6136-6137h | |
6138-6139h | 613A-613Bh | 613C-613Dh | 613E-613Fh | |
6140-6141h | 6142-6143h | 6144-6145h | 6146-6147h | |
6148-6149h | 614A-614Bh | 614C-614Dh | 614E-614Fh | |
6150-6151h | 6152-6153h | 6154-6155h | 6156-6157h | |
6158-6159h | 615A-615Bh | 615C-615Dh | 615E-615Fh | |
6160-6161h | 6162-6163h | 6164-6165h | 6166-6167h | |
6168-6169h | 616A-616Bh | 616C-616Dh | 616E-616Fh | |
6170-6171h | 6172-6173h | 6174-6175h | 6176-6177h | |
6178-6179h | 617A-617Bh | 617C-617Dh | 617E-617Fh | |
6180-6181h | 6182-6183h | 6184-6185h | 6186-6187h | |
6188-6189h | 618A-618Bh | 618C-618Dh | 618E-618Fh | |
6190-6191h | 6192-6193h | 6194-6195h | 6196-6197h | |
6198-6199h | 619A-619Bh | 619C-619Dh | 619E-619Fh | |
61AO-61A1h | 61A2-61A3h | 61A4-61A5h | 61A6-61A7h | |
61A8-61A9h | 61AA-61ABh | 61AC-61ADh | 61AE-61AF | |
61BO-61B1h | 61B2-61B3h | 61B4-61B5h | 61B6-61B7h | |
61B8-61B9h | 61BA-61BBh | 61BC-61BDh | 61BE-61BFh | |
61CO-61C1h | 61C2-61C3h | 61C4-61C5h | 61C6-61C7h | |
61C8-61C9h | 61CA-61CBh | 61CC-61CDh | 61CE-61CFh | |
61DO-61D1h | 61D2-61D3h | 61D4-61D5h | 61D6-61D7h | |
61D8-61D9h | 61DA-61DBh | 61DC-61DDh | 61DE-61DF | |
61EO-61E1h | 61E2-61E3h | 61E4-61E5h | 61E6-61E7h | |
61E8-61E9h | 61EA-61EBh | 61EC-61EDh | 61EE-61EFh | |
61FO-61F1h | 61F2-61F3h | 61F4-61F5h | 61F6-61F7h | |
61F8-61F9h | 61FA-61FBh | 61FC-61FDh | 61FE-61FFh |
Передача в Mailbox
CPU хранит данные, которые передаются в настроенный на передачу сообщения Mailbox. После присоединения к данным идентификатора посылается запрос в ОЗУ, был ли бит TRS установлен, разрешается ли работа Mailbox, при этом устанавливается бит передачи ME.n (n – номер Mailbox).
Если более одного Mailbox готовы к передаче и более чем один соответствующий бит TRS установлен, сообщения посылаются по очереди в порядке уменьшения, начиная с Mailbox с самым высоким приоритетом.
В режиме SCC приоритет передающего Mailbox зависит от номера Mailbox. Самый высокий номер Mailbox (=15) обладает самым высоким приоритетом передачи.
В eCAN приоритет передачи Mailbox зависит от состояния регистра управления сообщением (MSGCTRL) в поле TPL. Сначала передает Mailbox с самым высоким значением поля TPL. Только когда два Mailbox имеют одинаковые значения TPL-полей, сначала передает Mailbox с высшим номером.
Если во время передачи будет допущена ошибка из-за потери арбитража или другая ошибка, то передача сообщения будет произведена вновь. Перед повтором передачи CAN-модуль проверяет, нет ли запросов от других узлов, и затем разрешает передачу Mailbox с самым высоким приоритетом.
Прием в Mailbox
Идентификатор каждого принятого сообщения сравнивается с идентификатором, содержащимся на каждом Mailbox, используя маску. Когда обнаружено совпадение, полученный идентификатор, биты управления и байты данных записываются на определенный ОЗУ адрес. В то же время формируется бит ожидания приема сообщения RMP[n] (RMP.31-0), устанавливается и происходит прерывание, если оно разрешено. Если сообщение идентификатора не произошло, то сообщение не сохраняется [5].
При приеме сообщения контроллер сообщения начинает искать соответствующий идентификатор в Mailbox, начиная с самого высокого номера. Mailbox 15 в SCC-режиме имеет самый высокий номер и, следовательно, высший приоритет. Mailbox 31 имеет самый высокий номер при выключенном режиме SCC и имеет наивысший приоритет в eCAN-модуле.
Регистр RMP[n] (RMP.31-0) должен быть сброшен CPU после чтения данных. Если принимается второе сообщение для одного Mailbox и бит ожидания приема сообщения уже установлен, то устанавливается бит RML[n] (RML.31-0) и сообщение задерживается. Хранимое сообщение записывается поверх с новыми данными, если сброшен бит защиты наложения записи OPC[n] (OPC.31-0), иначе проверяется следующий Mailbox.
Если Mailbox настроен на прием и бит RTR установлен для этого, Mailbox может передать кадр удаленного запроса данных. Как только запрос передан, бит TRS Mailbox eCAN сбрасывается.