СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №2/2012
ПРАКТИЧЕСКАЯ ЭЛЕКТРОНИКА дущему микроконтроллеру требуется вывести байт, то записанный в SPI0DAT байт выводится по линии MOSI. Если же ведущемуМК требуется ввести байт, то в регистр SPI0DAT записывается «не нужный» нулевой байт (0 × 00), который также выводится по линии MOSI, а вот по линииMISO в ведущийМК вводится информационный байт, посылаемый ведомым МК. Таким образом, линия MOSI при вводе байта ведущим работа ет просто на холостой вывод байта, ко торый ни ведущему, ни ведомому МК не нужен, да и сама линия MOSI в этот момент (в информационном смысле) не используется. Так почему бы не ис пользовать эту линиюдля синхрониза ции вывода байта ведомым МК с вво дом байта ведущим МК? Пусть значение неинформативного байта, выводимого ведущимМК по ли нии MOSI, равно 0 × 0F. Тогда на линии MOSI при нескольких попытках ввода байта ведущимМК сигнал будет иметь форму меандра (см. рис. 27). Анализи руя состояние линии MOSI, ведомый МК может приурочить вывод своего байта 0 × 40, или символа ‘@’, как раз к тому моменту, когда ведущий будет его читать. Этот момент происходит каждый раз, когда на линии MOSI бу дет очередной срез импульса ( t 0 на рис. 27). Этот момент t 0 ведомый мик роконтроллер может легко определить с помощью всего двух команд: while(!MOSI); while(MOSI); Таким образом, независимо от того, в какой момент времени начнут вы полняться две приведённые команды, их выполнение закончится строго в момент t 0 . Если теперь ведомыйМК вы ведет символ ‘@’, то ведущий МК пра вильно его считает. Чтобы вывести этот символ, в программе ведомогоМК должныбыть записаны следующие две команды: SPIEN=1; outspi(0x40); Эти две команды, естественно, вы полнятся с некоторой задержкой t з (см. рис. 27), однако если это время истечёт до первого фронта импульса SCK, об мен произойдёт без ошибок. Если же время задержки превысит время от момента t 0 до фронта первого импуль са SCK, то ведомый МК опять считает неверный результат. Время задержки скорости обмена по SPI зависит от опе ративности, с которой ведомый мик роконтроллер выполнит вышеприве дённые четыре команды. Это время также зависит от того, какую задержку вносят ИС цифровых изоляторов. Например, микросхемы ISO7220C и ADUM7441C, работающие на макси мальных скоростях 25Мбод, вносят за держку в 40…50 нс, а микросхема SI8663BC, работающая на скоростях до 150Мбод, вносит задержку в несколько наносекунд. Естественно ожидать от неё работу по интерфейсу SPI с боль шей скоростью (в реальности так и произошло). Отметим, что эти четыре команды составляют программу синхрониза ции, приведённую выше и названную HSSPI(). Символы HS – от первых букв Hand Shake, т.е. рукопожатие (ведомо го и ведущего микроконтроллера). Следует также упомянуть о необхо димости «сдвинуть» сигналы SPI на одинразряд вправо в матрице соедине ний для микроконтроллера C8051F321. На рисунке 28a показана матрица со единений, на которой сигналы SPI за нимают выводы P0.0 – P0.3 (стандарт ный вариант), а на рисунке 28б – после того, как вывод P0.0 пропущен коман дой skip. В таком состоянии вывод P0.0 – вывод 2 микросхемы микрокон троллера C8051F321 (DD1, см. рис. 1) можно использовать для сигнала сброса микроконтроллера C8051F067 (RST067). Тогда печатные платы уст ройств 3 wireSPI и 4 wireSPI разводятся намного проще (пропуск сделан ис ключительно для удобства). Если тщательно подойти к выбору портов матрицей соединений, то для каждого из устройств 3 wireSPI и 4 wireSPI можно найти решение, опти мальное с точки зрения разводки пла ты. Например, если выбрать матрицу соединений в соответствии с конфи гурацией, показанной на рисунке 29, и для сигнала RST067 использовать порт P0.1, то плату 4 wireSPI_ADможно развести оптимально. Однако если для каждого из устройств выбрать свою конфигурацию матрицы соединений, потребуются отдельные программы. В листингах 1 – 3 (см. дополнитель ные материалына сайте журнала) при ведены тексты всех трёх программ, представляющие собой программное обеспечение всех устройств, описан ных в статье. Это программа для ком пьютера, написанная на языке Clarion v.6.0, со своим файл проектом, про грамма для микроконтроллера C805 1F321 со своим запускающим*.bat файлом, предназначенным для её трансляции, и программа для микро контроллера C8051F067 также со сво им *.bat файлом. В связи с тем что в программах использованыпримеры, взятые из про грамм FileTransfer [6], а для конфигури рования портов ввода/вывода и пери ферийных устройствмикроконтролле ров – бесплатно поставляемая фирмой Silicon Labs программа Config2.exe (v. 2.5), комментарии от Silicon Labs в текстах программ сохранены в ориги нальном виде. О БСУЖДЕНИЕ РЕЗУЛЬТАТОВ Результаты работы программ пока занына рисунке 30 при различных ре жимах работы микроконтроллеров C8051F321 и C8051F067. На рисун ке 30а приведён снимок экрана, когда микроконтроллер C8051F321 работает только с интерфейсомUSB, а обмен по интерфейсу SPI пропущен. Можно за 43 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2012 SCK MISO 1 0x0F while(MOSI); C8051F321: SPIEN=1; OUTSPI(0x40); 0x0F while(!MOSI); 0x40('@') C8051F067: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 t 0 while(INSPI() != 0x40); t з MOSI 0 Рис. 27. Сигналы интерфейса SPI при синхронизации ведомого МК с ведущим МК © СТА-ПРЕСС
RkJQdWJsaXNoZXIy MTQ4NjUy