Регистры управления и состояния 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 сбрасывается.