Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
На рис. 4.71 представлена функциональная схема контроллера SPI. Остановимся сначала на системе синхронизации, которая располагается в левом верхнем углу рисунка. Модуль SPI использует в качестве источника тактирования импульсную последовательность PCLOCK, частота которой равна частоте ECLOCK (т.е. частоте системной шины МК). Частота PCLOCK делится делителем с программируемым коэффициентом. На выходе делителя формируется сигнал, частота которого определяет скорость обмена данными по SPI, если контроллер работает в ведущем режиме. Коэффициент деления назначается битами SPR2…SPR0 регистра скорости передачи SP0BR.
Рис. 4.71. Аппаратные средства контроллера синхронного обмена SPI
Данные, которые подлежат передаче, а также принятые от другого устройства
Если два устройства связаны по SPI, то 8-разрядный регистр данных ведущего устройства и 8-разрядный регистр данных ведомого устройства образуют вместе 16-разрядный кольцевой сдвиговый регистр (рис. 4.70). В процессе передачи код 16-разрядного регистра сдвигается под действием импульсов синхронизации SCK. В ответ на каждый импульс SCK один двоичный разряд выдвигается из регистра данных ведущего на линию MOSI и запоминается в первом слева разряде регистра ведомого (см. рис. 4.70). В то же время крайний правый бит регистра данных ведомого выдвигается на линию MISO и запоминается в регистре ведущего. В результате, по прошествии восьми импульсов синхронизации SCK код 8-разрядного регистра данных ведущего переместится в регистр данных ведомого, а 8-разрядный код ведомого — в регистр данных ведущего. Таким образом, в процессе обмена ведущее и ведомое устройства поменяются содержимым их регистров данных.
Для того, чтобы начать обмен данными по SPI, необходимо выполнить некоторую последовательность действий по инициализации контроллера SPI. Во-первых, порт S должен быть конфигурирован соответствующим образом с использованием регистра направления передачи порта DDRS. Далее следует установить коэффициент деления частоты PCLOCK. Возможные значения коэффициента деления: 2, 4, 8, 16, 32, 64, 128 и 256. Желаемый коэффициент деления устанавливается разрядами SPR2…SPR0 регистра скорости передачи SP0BR. Для сигнала синхронизации SCK следует определить не только частоту, но и форму сигнала. По форме сигнала различают четыре типа сигналов синхронизации SCK, которые отличаются полярностью и сдвигом фазы по отношению к сигналам на линиях MOSI и MISO. Выбор формы сигнала SCK определяется комбинацией битов CPOL:CPHA в регистре управления SP0CR1.
Выбрав скорость обмена, следует определить значения битов управляющих регистров SP0CR1 и SP0CR2. Так бит MTSR регистра управления SP0CR1 ведущего должен быть установлен в 1, а такой же бит в регистре управления ведомого — в 0. Тогда первому контроллеру будет назначен режим ведущего, а второму — режим ведомого. И они составят пару для обмена. Кроме того, для организации обмена необходимо правильно установить уровни сигналов на входах
После того, как все биты регистров управления SP0CR1 и SP0CR2 установлены в соответствии с выбранным режимом работы, следует разрешить работу контроллера SPI. Для этого предназначен бит SPE регистра SP0CR1. Разрешение работы ведущего контроллера SPI должно быть выполнено ранее ведомого.
Если все операции по инициализации модулей SPI ведущего и ведомого МК завершены, то можно приступить к непосредственно к обмену данными. Начало обмена инициирует ведущий. Для этого необходимо под управлением программы записать пересылаемый байт информации в регистр данных SP0DR модуля SPI. Если сдвиговый регистр модуля в момент записи оказался пустым, то данные немедленно автоматически перемещаются из регистра данных в сдвиговый регистр. Далее аппаратные средства контроллера SPI формируют восемь импульсов синхронизации SCK.
Аппаратные средства контроллера SPI могут генерировать запросы на прерывание. Два источника запросов располагаются в регистре состояния SP0SR. Первый источник — триггер завершения обмена SPIF, второй источник — флаг нарушения режима MODF.
Оба прерывания разрешаются установкой в 1 бита SPIE в регистре управления SP0CR1.
1. Каковы различия между двумя режимами работы контроллера SPI: режимом ведущего и режимом ведомого?
Ответ: Контроллер SPI, работающий в режиме ведущего, начинает обмен и генерирует импульсы синхронизации SCK для обмена. Таким образом, ведущий контроллер управляет обменом. Ведомый контроллер SPI ожидает сигналов от ведущего, и под их управлением запоминает информацию с линии MOSI, а также генерирует информацию на линию MISO. Завершается обмен под управлением ведущего.
2. Каково назначение сигнала SCK?
Ответ: Сигнал SCK предназначается для синхронизации передачи информации между двумя устройствами. Частота этого сигнала определяет скорость передачи. В течение одного периода SCK два устройства обмениваются одним битом данных.
4.19.3. Регистры контроллера SPI
Подобно контроллеру асинхронного обмена контроллер SPI обслуживается несколькими регистрами специальных функций:
• Регистр скорости обмена;
• Регистры управления;
• Регистр состояния;
• Регистр данных.
Далее мы рассмотрим формат и назначение битов каждого регистра модуля SPI.
Регистр скорости обмена SPxBR позволяет выбрать частоту следования импульсов синхронизации SCK, а, следовательно, и скорость обмена по синхронному последовательному интерфейсу. Формат регистра SPxBR представлен на рис. 4.72. Три бита этого регистра SPR2…SPR0 определяют коэффициент деления импульсной последовательности ECLOCK, из которой образуется сигнал синхронизации SCK. Соответствие численных значений коэффициентов деления возможным комбинациям битов SPR2…SPR0 устанавливает таблица рис. 4.72. Внимательно проанализируйте данные этой таблицы. Вспомните, что при тех же частотах системной шины МК, максимальная скорость обмена в асинхронном режиме с использованием контроллера SCI составляла 38400 бод, что для SPI эквивалентно частоте SCK в 38,4 кГц. А для контроллера SPI максимальная частота синхронизации, а, следовательно, и максимальная скорость обмена составляет 4,0 МГц.
Выбор частоты обмена по SPI
SPR[2:0] | Коэффициент деления | При частоте внутренней системной шины | |
---|---|---|---|
4 МГц | 8 МГц | ||
000 | 2 | 2,0 МГц | 4,0 МГц |
001 | 4 | 1,0 МГц | 2,0 МГц |
010 | 8 | 500 кГц | 1,0 МГц |
011 | 16 | 250 кГц | 500 кГц |
100 | 32 | 125 кГц | 250 кГц |
101 | 64 | 62,5 кГц | 125 кГц |
110 | 128 | 31,3 кГц | 62,5 кГц |
111 | 256 | 15,6 кГц | 31,3 кГц Формат регистров управления контроллера SPI |