Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

2.Настроить скорость обмена данными, задав делитель тактовой частоты через регистр S0SPCCR (1.17.1). Требуется принимать во внимание допустимую частоту для других устройств, подключенных к шине SPI.

3.Настроить модуль SPI через регистр S0SPCR. Обычно требуется лишь включить режим ведущего (бит MSTR) и задать число передаваемых бит (разряды BITEN и BITS).

4.При необходимости включить прерывание от модуля SPI через ре-

гистры VICVectAddr0, VICVectCntl0 и VICIntEnable.

Передача инициируется путем записи в регистр S0SPDR передаваемых данных.

Готовность приемопередатчика может быть проверена путем опроса бита SPIF (бит 7) в регистре S0SPSR. Единица обозначает завершение передачи. Альтернатива — использование системы прерываний.

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

1.17.4 Передача и прием данных в режиме ведомого

1.Настроить портовые линии на режим SPI через регистры PINSEL0, PINSEL1. В простейшем случае потребуются лишь одна линия: MOSI (для приема) или MISO (для передачи).

2.Настроить модуль SPI через регистр S0SPCR. Обычно требуется лишь включить режим ведомого (бит MSTR) и задать число передаваемых бит (биты BITEN и BITS).

3.При необходимости включить прерывание от модуля SPI через ре-

гистры VICVectAddr0, VICVectCntl0 и VICIntEnable.

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

Готовность приемопередатчика может быть проверена путем опроса бита SPIF (бит 7) в регистре S0SPSR (единица — обмен завершен) или через прерывания.

После обнаружения готовности можно считать принятый пакет из регистра S0SPDR. В режиме ведущего может осуществляться только передача, только прием или и то и другое.

1.18 Последовательный синхронный приемо-передатчик I2С

1.18.1 Назначение и основы функционирования интерфейса I2С

I2C — последовательный синхронный интерфейс, предназначенный для передачи небольших объемов информации между микросхемами. Микросхемы, поддерживающие I2C — АЦП, ЦАП, ПЗУ, датчики температуры,

75

драйверы дисплеев, порты ввода-вывода и др. Используется всего два проводника SCL — тактирование и SDA данные. Одновременно возможна передача только в одном направлении. Скорость передачи данных не велика — до 400 кбит/с или (реже) до 1 Мбит/с. В LPC2148 скорость не превышает 400 кбит/с.

Одно из устройств на шине I2C является ведущим, остальные — ведомыми. Допускается подключение до 128 устройств. I2С предоставляет аппаратную поддержку адресации.

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

Сопротивления подтягивающих резисторов рекомендовано [2] приближенно рассчитывать по формуле

(кОм),

где — число устройств на шине I2C.

Начало и конец пакета I2C обозначаются состояниями START и STOP, которые формируются ведущим устройством. Состояние START представляет собой спадающий фронт сигнала SDA при высоком уровне на SCL. Состояние STOP генерируется нарастающим фронтом SDA также при высоком SCL. Временные диаграммы сигналов на лини данных SDA показаны на ри-

сунке 1.18.1.

START

 

 

 

 

STOP

Адрес A6-A0

R/W

A

Данные D7-D0

A

A/A

START

 

 

 

 

STOP

Адрес A6-A0

R/W

A

Данные D7-D0

A

A

 

 

 

Генерируется ведущим

 

Генерируется ведомым

Рисунок 1.18.1 – Временные диаграммы сигнала SDA при передаче от ведущего к ведомому (вверху) и ведомого к ведущему (внизу)

Первым байтом передается 7 бит адреса ведомого и бит направления передачи (передача от ведущего ведомому) или (передача от ведомого ведущему). После адресного байта передается один или несколько байт данных. Прием каждого байта, включая адресный, подтверждается нулевым битом, то есть замыканием на ноль линии SDA через выходной транзистор. Если ведомый не подтвердит прием байта, ведущий должен сгенерировать состояние STOP и прекратить передачу. Принимая данные, ведущий подтверждает все байты кроме последнего. Отсутствие подтверждения заставляет ведомый освободить линию, после чего ведущий сможет сгенерировать состояние STOP.

76

Микроконтроллер LPC2148 оснащен двумя идентичными модулями I2C (I2C0 и I2C1). Здесь будем рассматривать только работу в режиме ведущего. Режим ведомого может потребоваться только для организации передачи данных между двумя или несколькими микроконтроллерами. Полное описание можно найти в литературе [1] или в документации к LPC214x.

1.18.2 Управляющие регистры

Схема регистров управления модулями I2C показана на рисунке 1.18.2.

Регистры I2CxCONSET и I2CxCONCLR — управляют состоянием модулей I2C. Запись единицы в один из разрядов регистра xSET переводит модуль в соответствующие состояние. Запись единица в xCLR снимает соответствующие состояние. Запись нулей в эти регистры не имеет значения.

Бит 2 (AA) разрешает или запрещает генерирование подтверждения

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

I2CxCONSET – установка состояния I2C

15

8

7

6

5

4

3

2

1

0

 

 

 

EN STA STO

SI

AA

 

 

 

 

ВКЛ

 

 

 

Старт/Стоп

 

Подтвержд.

 

I2CxCONCLR – сброс состояния I2C

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

8

7

6

5

4

3

2

1

0

 

 

 

EN STA

 

SI

AA

 

 

 

 

ВКЛ

 

 

 

Старт

 

 

Подтвержд.

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

I2CxSTAT – Состояние I2C

 

 

 

 

 

 

 

 

 

 

 

15

8

7

 

 

 

 

 

3

2

 

0

STATUS

Состояние I2C

Рисунок 1.18.2 – Схема регистров управления приемопередатчиками I2С

Бит 3 (SI) — флаг запроса прерывания при завершении операции приемопередатчиком I2C. Аппаратная установка единицы свидетельствует о готовности модуля I2C. Сброс в ноль инициирует генерирование очередного состояния или передачу данных.

Бит 4 (STO). Запись единицы генерирует состояние STOP, прекращая обмен по I2C. Отменить STOP нельзя, поэтому бит STO в регистре I2CxCONCLR отсутствует.

Бит 5 (STA). Устанавливает или сбрасывает состояние START, начиная передачу пакета. После установи через I2CxCONSET бит должен сбрасываться через I2CxCONCLR программным путем.

Бит 6 (EN) включает или отключает приемопередатчик I2C. Прежде чем использовать модуль необходимо установить этот бит в регистре

I2CxCONSET.

В таблице 1.18.1 приведены наиболее часто используемые кодовые комбинации, записываемые в регистры I2CxCONSET/CLR.

77

Таблица 1.18.1 – Коды управления состоянием через I2CxCONSET/CLR

Код

Описание

0x40

Включить/выключить приемопередатчик I2C

0x20

Сгенерировать состояние START

0x04

Разрешить/запретить подтверждение приема байта

0x10

Сгенерировать состояние STOP

0x08

Сбросить запрос прерывания (для I2CxCONCLR) прочитать

флаг запроса готовности (для I2CxCONSET)

 

Регистр I2CxSTAT необходим для чтения текущего стояния модуля I2C и принятия решения о следующем действии.

Биты 3–7 (STATUS) содержат код текущего состояния. Коды для режима ведущего приведены в таблице 1.18.2.

Таблица 1.18.2 – Коды состояния приемопередатчика I2C в режиме ведущего

Код

Описание

Направление

0x00

Ошибка

передача/прием

0x08

Передано состояние START

передача/прием

0x10

Передано повторное состояние START

передача/прием

0x18

Передан адрес ведомого (SLA) и признак режима

передача

записи (W), подтверждение (ACK) получено

0x20

Адрес ведомого (SLA) и признак режима записи (W)

передача

НЕ переданы, подтверждение (ACK) НЕ получено

0x28

Данные переданы, подтверждение (ACK) получено

передача

0x30

Данные НЕ переданы, подтверждение (ACK)

передача

НЕ получено

0x38

Арбитраж потерян

передача/прием

0x40

Адрес ведомого (SLA) и признак режима чтения (R)

прием

переданы, подтверждение (ACK) получено

0x48

Адрес ведомого (SLA) и признак режима чтения (R)

прием

НЕ переданы, подтверждение (ACK) НЕ получено

0x50

Данные получены, подтверждение (ACK) отправлено

прием

0x58

Данные получены, подтверждение (ACK)

прием

НЕ отправлено

0xF8

Простой

передача/прием

Регистр состояния I2CxDAT предназначен для записи байта данных, который предстоит передать. Передача будет сбросов запроса прерывания SI в регистре I2CxCONCLR. При чтении регистр содержит принятый байт.

Регистры частоты I2CxSCLH, I2CxSCLL представляют собой делители частоты, определяющие длительности высокого (I2CxSCLH) и низкого (I2CxSCLL) состояний на линии тактирования SCL. Учитываются 16 младших разрядов этих регистров. Частота определяется их суммой:

. (1.18.1)

78