Выбрав скорость обмена, следует определить значения битов управляющих регистров SP0CR1 и SP0CR2. Так бит MTSR регистра управления SP0CR1 ведущего должен быть установлен в 1, а такой же бит в регистре управления ведомого — в 0. Тогда первому контроллеру будет назначен режим ведущего, а второму — режим ведомого. И они составят пару для обмена. Кроме того, для организации обмена необходимо правильно установить уровни сигналов на входах
обоих контроллеров. Если в системе всего два устройства связаны по шине SPI, то вход
ведущего должен быть установлен в 1, а аналогичный вход ведомого в 0 (рис. 4.70). Если в системе к шине SPI подключено несколько ведомых устройств, то вход выбора ведомого
каждого устройства должен устанавливаться в 0 ведущим только тогда, когда ведущий обменивается данными именно с этим устройством. Во время обмена данным с другими ведомыми устройствами вход
неактивного ведомого должен находиться в 1.
После того, как все биты регистров управления SP0CR1 и SP0CR2 установлены в соответствии с выбранным режимом работы, следует разрешить работу контроллера SPI. Для этого предназначен бит SPE регистра SP0CR1. Разрешение работы ведущего контроллера SPI должно быть выполнено ранее ведомого.
Если все операции по инициализации модулей SPI ведущего и ведомого МК завершены, то можно приступить к непосредственно к обмену данными. Начало обмена инициирует ведущий. Для этого необходимо под управлением программы записать пересылаемый байт информации в регистр данных SP0DR модуля SPI. Если сдвиговый регистр модуля в момент записи оказался пустым, то данные немедленно автоматически перемещаются из регистра данных в сдвиговый регистр. Далее аппаратные средства контроллера SPI формируют восемь импульсов синхронизации SCK. Каждый импульс SCK сдвигает один двоичный разряд регистра данных ведущего по линии MOSI в регистр данных ведомого. Одновременно другой разряд регистра данных ведомого по линии MISO вдвигается в регистр данных ведущего. По истечении восьми импульсов SCK пересылка одного байта заканчивается, и устанавливаются флаги SPIF в регистре состояния обоих контроллеров. В ведущем МК флаг SPIF сигнализирует о завершении передачи одного байта, в то время, как в ведомом МК этот флаг информирует о завершении приема байта данных. Если пересылка следующих байтов не предполагается, то вход
ведомого должен быть установлен в 1, что переводит контроллер SPI ведомого устройства в неактивное состояние. Рассмотренный способ обмена характеризуется одновременным перемещением данных от ведущего к ведомому и в обратном направлении. Такой способ обмена называют полнодуплексным.
Аппаратные средства контроллера 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
Регистр скорости обмена SPxBR позволяет выбрать частоту следования импульсов синхронизации SCK, а, следовательно, и скорость обмена по синхронному последовательному интерфейсу. Формат регистра SPxBR представлен на рис. 4.72. Три бита этого регистра SPR2…SPR0 определяют коэффициент деления импульсной последовательности ECLOCK, из которой образуется сигнал синхронизации SCK. Соответствие численных значений коэффициентов деления возможным комбинациям битов SPR2…SPR0 устанавливает таблица рис. 4.72. Внимательно проанализируйте данные этой таблицы. Вспомните, что при тех же частотах системной шины МК, максимальная скорость обмена в асинхронном режиме с использованием контроллера SCI составляла 38400 бод, что для SPI эквивалентно частоте SCK в 38,4 кГц. А для контроллера SPI максимальная частота синхронизации, а, следовательно, и максимальная скорость обмена составляет 4,0 МГц.
Читать дальше