Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Stenin Lab / C8051F60-67-устройство МК.pdf
Скачиваний:
150
Добавлен:
10.02.2015
Размер:
5.19 Mб
Скачать

C8051F060/1/2/3/4/5/6/7

19.2. Регистры CAN.

Регистры CAN классифицируются следующим образом:

1.Регистры протокола CAN-контроллера: регистр управления CAN, регистр прерывания, регистр контроля ошибок, регистр состояния шины, регистр тестирования.

2.Интерфейсные регистры буферов сообщений: Используются для настройки 32 буферов сообщений, для передачи данных в буферы сообщений и приема данных из них. Процессорное ядро CIP-51 обращается к ОЗУ сообщений CAN посредством интерфейсных регистров буферов сообщений. При записи номера буфера сообщения в регистр запроса команды IF1 или IF2 содержимое соответствующих интерфейсных регистров (IF1 или IF2) будет передано в буфер сообщений, находящийся в ОЗУ CAN, или получено из него.

3.Регистры обработчика сообщений: Эти регистры доступны только для чтения. Они используются ядром CIP-51 для получения информации о буферах сообщений (флаги MSGVLD, ожидание запроса передачи, флаги поступления новых данных) и об отложенных прерываниях (который из буферов сообщений вызвал прерывание или условие возникновения прерывания).

4.Регистры специального назначения (SFR) ядра CIP-51: Пять регистров, расположенные в памяти CIP-51, обеспечивают прямой доступ к некоторым регистрам протокола CAN-контроллера и индексный косвенный доступ ко всем регистрам CAN.

19.2.1. Регистры протокола CAN-контроллера

Регистры протокола CAN-контроллера используются для настройки CAN-контроллера, обслуживания прерываний, слежения за состоянием шины и перевода контроллера в тестовые режимы работы. Доступ к регистрам протокола CAN-контроллера осуществляется через SFR регистры CIP-51 с помощью индексного метода. К некоторым регистрам протокола CAN-контроллера можно обращаться непосредственно путем адресации SFR регистров в памяти CIP-51.

К регистрам протокола CAN-контроллера относятся: регистр управления CAN (CAN0CN), регистр состояния CAN (CAN0STA), регистр тестирования CAN (CAN0TST), регистр счетчика ошибок, регистр BTR и дополнительный регистр BRP (регистр предварительного делителя скорости передачи данных). К регистрам CAN0CN, CAN0STA и CAN0TST можно обращаться через SFR регистры CIP-51. Доступ ко всем другим регистрам осуществляется косвенно через регистры CAN0ADR, CAN0DATH и CAN0DATL с помощью метода индексной адресации CAN.

Информация о функционировании регистров управления протоколом CAN и их использовании приведена в руководстве пользователя Bosch CAN User’s Guide.

19.2.2. Интерфейсные регистры буферов сообщений

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

Буферы сообщений хранятся в ОЗУ сообщений. Доступ к ним и их настройка осуществляются с помощью интерфейсных регистров буферов сообщений. Эти регистры доступны через регистры CIP-51 CAN0ADR и CAN0DAT с помощью метода косвенной индексной адресации.

Информация о функционировании интерфейсных регистров буферов сообщений и их использовании приведена в руководстве пользователя Bosch CAN User’s Guide.

19.2.3. Регистры обработчика сообщений

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

Информация о функционировании регистров обработчика сообщений и их использовании приведена в руководстве пользователя Bosch CAN User’s Guide.

Ред. 1.2

228

C8051F060/1/2/3/4/5/6/7

19.2.4. Регистры специального назначения CIP-51

Периферийные модули МК C8051F060/1/2/3 настраиваются и управляются с помощью регистров специального назначения (SFR регистров). К большинству регистров CAN-контроллера нельзя обращаться непосредственно через SFR регистры. Три регистра CAN-контроллера доступны непосредственно через SFR регистры. Доступ ко всем другим регистрам CAN-контроллера осуществляется косвенно с помощью трех SFR

регистров CIP-51: регистры данных CAN (CAN0DATH и CAN0DATL) и регистр адреса CAN (CAN0ADR).

Таким образом, существует всего пять CAN-регистров, используемых для настройки и запуска CANконтроллера.

19.2.5. Использование регистров CAN0ADR, CAN0DATH и CAN0DATL для доступа

к CAN-регистрам

Каждый регистр CAN-контроллера имеет индексный номер (см. табл. 19.1). Размер адресного пространства CAN-регистров составляет 128 слов (256 байт). CAN-регистр доступен через регистры данных CAN (CAN0DATH и CAN0DATL) тогда, когда индексный номер CAN-регистра помещен в регистр адреса CAN (CAN0ADR). Например, если требуется загрузить в регистр BTR новое значение, необходимо в регистр CAN0ADR записать значение 0х03. После этого доступ к младшему байту регистра BTR осуществляется через регистр CAN0DATL, а к старшему – через регистр CAN0DATH. Регистр CAN0DATL доступен в побитном режиме адресации. Чтобы загрузить значение 0х2304 в регистр BTR, необходимо:

CAN0ADR = 0х03; // Загрузить индекс регистра BTR (см. табл. 19.1)

CAN0DATH = 0х23; // Загрузить старший байт значения в старший байт регистра данных CAN0DATL = 0х04; // Загрузить младший байт значения в младший байт регистра данных

Примечание: Доступ к регистрам CAN0CN, CAN0STA и CAN0TST можно осуществлять как с помощью индексного метода, так и непосредственно через SFR регистры CIP-51. CAN0CN расположен по адресу 0xF8/SFR страница 1 (рис. 19.6), CAN0TST расположен по адресу 0xDB/SFR страница 1 (рис. 19.7), CAN0STA расположен по адресу 0xC0/SFR страница 1 (рис. 19.8).

19.2.6. Функция автоинкремента CAN0ADR

В целях облегчения программирования буферов сообщений регистр CAN0ADR наделен возможностью автоинкремента своего содержимого для индексов из диапазонов 0х08…0х12 (интерфейсные регистры 1) и 0х20…0х2А (интерфейсные регистры 2). Если регистр CAN0ADR содержит индекс из этих диапазонов, то при

чтении/записи регистра CAN0DATL произойдет автоинкремент содержимого регистра CAN0ADR на 1, после чего он будет указывать на 16-разрядное слово следующего CAN-регистра. Это ускоряет программирование часто изменяемых интерфейсных регистров во время настройки буферов сообщений.

Примечание: Таблица 19.1, приведенная ниже, заменяет собой рис. 5 раздела 3 “Programmer’s Model” руководства пользователя Bosch CAN User’s Guide.

Таблица 19.1. Индексы CAN-регистров и их значения, устанавливаемые при сбросе

 

Индекс CAN-

Название регистра

Значение

Примечания

 

регистра

после сброса

 

 

 

 

 

0х00

Регистр управления CAN

0х0001

Доступен как SFR регистр

 

 

 

 

 

 

 

 

 

 

 

0х01

Регистр состояния

0х0000

Доступен как SFR регистр

 

 

 

 

 

 

 

 

 

 

 

0х02

Регистр ошибки

0х0000

Доступен только для чтения

 

 

 

 

 

 

 

 

 

 

 

0х03

Регистр BTR

0х2301

Запись разрешается битом ССЕ

 

 

регистра CAN0CN

 

 

 

 

 

0х04

Регистр прерываний

0х0000

Доступен только для чтения

 

 

 

 

 

 

 

 

 

 

 

0х05

Регистр тестирования

0х0000

Бит 7 (RX) определяется шиной CAN

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

229

Ред. 1.2

C8051F060/1/2/3/4/5/6/7

Таблица 19.1. Индексы CAN-регистров и их значения, устанавливаемые при сбросе (продолжение)

 

Индекс CAN-

Название регистра

Значение

Примечания

 

 

регистра

после сброса

 

 

 

 

 

 

0х06

Дополнительный регистр BRP

0х0000

Запись разрешается битом TEST

 

 

 

регистра CAN0CN

 

 

 

 

 

 

 

 

Запрос команды IF1

 

CAN0ADR автоинкрементируется в

 

 

0х08

 

0х0001

индексном диапазоне IF1 (0х08 –

 

 

 

 

 

0х12) при записи в CAN0DATL

 

 

0х09

Маска команды IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х0A

Маска 1 IF1

0хFFFF

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х0B

Маска 2 IF1

0хFFFF

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х0C

Арбитраж 1 IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х0D

Арбитраж 2 IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х0E

Управление сообщением IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х0F

Данные А1 IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х10

Данные А2 IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х11

Данные B1 IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х12

Данные B2 IF1

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х20

Запрос команды IF2

0х0001

CAN0ADR автоинкрементируется в

 

 

 

индексном диапазоне IF2 (0х20 –

 

 

 

 

 

0х2A) при записи в CAN0DATL

 

 

0х21

Маска команды IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х22

Маска 1 IF2

0хFFFF

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х023

Маска 2 IF2

0хFFFF

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х24

Арбитраж 1 IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х25

Арбитраж 2 IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х26

Управление сообщением IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х27

Данные А1 IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х28

Данные А2 IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х29

Данные B1 IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х2A

Данные B2 IF2

0х0000

CAN0ADR автоинкрементируется

 

 

 

при записи в CAN0DATL

 

 

 

 

 

 

 

0х40

Запрос передачи 1

0х0000

Флаги запросов передачи для буферов

 

 

 

сообщений (только для чтения)

 

 

 

 

 

 

 

0х41

Запрос передачи 2

0х0000

Флаги запросов передачи для буферов

 

 

 

сообщений (только для чтения)

 

 

 

 

 

 

 

 

 

 

 

 

Ред. 1.2

230

C8051F060/1/2/3/4/5/6/7

Таблица 19.1. Индексы CAN-регистров и их значения, устанавливаемые при сбросе (продолжение)

Индекс CAN-

Название регистра

Значение

Примечания

регистра

после сброса

 

 

0х48

Новые данные 1

0х0000

Флаги новых данных для буферов

 

сообщений (только для чтения)

 

 

 

0х49

Новые данные 2

0х0000

Флаги новых данных для буферов

 

сообщений (только для чтения)

 

 

 

 

Ожидание прерывания 1

 

Флаги ожидания прерывания для

0х50

 

0х0000

буферов сообщений (только для

 

 

 

чтения)

0х51

Ожидание прерывания 2

0х0000

Флаги ожидания прерывания для

 

буферов сообщений (только для

 

 

 

чтения)

0х58

Достоверность сообщения 1

0х0000

Флаги достоверности сообщения для

 

буферов сообщений (только для

 

 

 

чтения)

0х59

Достоверность сообщения 2

0х0000

Флаги достоверности сообщения для

 

буферов сообщений (только для

 

 

 

чтения)

Рисунок 19.3. CAN0DATH: Старший байт регистра данных CAN

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение

 

 

 

 

 

 

 

 

при сбросе:

 

 

 

 

 

 

 

 

00000000

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

SFR Адрес: 0xD9

 

 

 

 

 

 

 

 

SFR страница: 1

Биты 7-0: CAN0DATH: Старший байт регистра данных CAN.

Регистры CAN0DAT используются для чтения/записи значений и данных из/в CAN-регистров(-ы), на которые указывает индексный номер, содержащийся в регистре CAN0ADR.

Регистр CAN0ADR используется для адресации регистров данных [CAN0DATH:CAN0DATL] требуемого CAN-регистра.

Индексный номер требуемого CAN-регистра записывается в регистр CAN0ADR. После этого регистр CAN0DAT можно использовать для записи/чтения в/из CAN-регистр(-а).

Рисунок 19.4. CAN0DATL: Младший байт регистра данных CAN

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение

 

 

 

 

 

 

 

 

при сбросе:

 

 

 

 

 

 

 

 

00000001

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

SFR Адрес: 0xD8

 

 

 

 

 

 

 

 

SFR страница: 1

Биты 7-0: CAN0DATL: Старший байт регистра данных CAN.

Регистры CAN0DAT используются для чтения/записи значений и данных из/в CAN-регистров(-ы), на которые указывает индексный номер, содержащийся в регистре CAN0ADR.

Регистр CAN0ADR используется для адресации регистров данных [CAN0DATH:CAN0DATL] требуемого CAN-регистра.

Индексный номер требуемого CAN-регистра записывается в регистр CAN0ADR. После этого регистр CAN0DAT можно использовать для записи/чтения в/из CAN-регистр(-а).

231

Ред. 1.2