Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 6. Осваиваем все возможности микроконтроллера ATtiny231 3 497 Режимы синхронизации интерфейса USI соответствуют аналогичным режимам передачи данных 0 и 1 интерфейса SPI. Обратимся теперь к временной диаграмме (рис. 6.43), отражающей процесс передачи данных по последовательной шине. Этот процесс вклю ­ чает в себя следующие шаги. Шаг 1. Устройство Slave и устройство Master подготавливают систему передачи данных в соответствии с выбранным протоколом (точки А и В). Подготовка производится путем загрузки байта данных, предназначен ­ ного для передачи, в сдвиговый регистр. Причем данные загружает как Master, так и Slave, — каждый в свой сдвиговый регистр. Настройка направления передачи информации (соответствующих выводов канала связи) производится при помощи того же самого регистра (DDR), который определяет направление пере ­ дачи информации в обычном режиме работы порта ввода-вывода. Операции, обозначенные точками А и В, можно выполнять в любом порядке. Главное, чтобы обе они завершились не позже половины такто ­ вого цикла синхросигнала USCK до начала следующего этапа (точка С), где происходит выборка данных. Это необходимо, чтобы гарантировать своевременную подготовку данных. Четырехразрядный счетчик на этом этапе сбрасывается в ноль. Шаг 2. Ведущий микроконтроллер (Master) программным путем выра ­ батывает один импульс тактового сигнала, дважды переключая значение USCK (точки С и D). По переднему фронту сигнала USI (точка С) проис ­ ходит выборка значений на входах DI обоих устройств (Slave и Master). По заднему фронту тактового сигнала (точка D) происходит изменение сиг ­ нала на выходах DO тех же устройств. Четырехразрядный счетчик увели ­ чит свое значение как по переднему, так и по заднему фронту. Шаг 2 повто ­ ряется восемь раз до окончания передачи все восьми битов (байта). Шаг 3. После восьми тактовых импульсов (то есть после 16 фронтов синхроимпульса) произойдет переполнение счетчика, что послужит сиг ­ налом конца передачи (точка Е). Управляющая программа должна обра ­ ботать полученные данные перед тем, как начинать передачу новых. Для обработки данных можно использовать прерывание. Прерывание по переполнению четырехразрядного счетчика способно пробудить микро ­ контроллер из режима сна (только из режима Idle). Пример операции SPI для ведущего устройства Следующий программный пример (см. Листинг 6.17 и 6.18) показывает, как можно использовать модуль SPI в качестве ведущего устройства SPI. Данный программный код оптимизирован по размеру и содержит только восемь команд (плюс команда ret). Предполагается, что ранее

RkJQdWJsaXNoZXIy MTExODQxMg==