Реализация ведущего устройства шины SMBus

Программа ведущего устройства шины SMBus для MSP430 реализует все существующие типы протоколов. Для экономии регистров, параметры переда­ются через стек. Максимальная глубина стека 40 байт. Память вне стека не за­трагивается, кроме случая операций над блоками. Во время передачи блока его начало передаётся как параметр (блок растёт в сторону верхних адресов памя­ти). Во время записи блока его размер известен до начала передачи, во время приёма блока его размер передаётся ведомым устройством. При этом следует соблюдать осторожность, чтобы данные из блока не затёрли программную или оперативную память.

Программа состоит из двух основных частей: подпрограмм верхнего уров­ня и подпрограмм нижнего уровня. Низкоуровневые подпрограммы обрабаты­вают сдвиг бит, временные характеристики и работу с портами ввода-вывода. Протоколы SMBus, по существу, состоят из нескольких стандартных блоков, которые вызываются и повторяются в определенном порядке. Эти стандартные блоки обрабатываются подпрограммами нижнего уровня. Подпрограммы вер­хнего уровня обеспечивают пользовательский интерфейс и сохраняют регист­ры. На каждый протокол приходится одна такая подпрограмма, в них устанав­ливаются параметры, а затем вызываются подпрограммы нижнего уровня. Для обеспечения требования протокола SMBus к выходам («открытый коллектор»), выводы процессора переключаются со входа на выход и наоборот. В выход­ных защёлках портов всегда присутствует лог. «0». Это означает, что MSP430 может «освободить» линию переключением вывода на вход, либо «занять» её (т.е. выставить там лог. «0») путём переключения вывода на выход. Выбор тре­буемых выводов осуществляется «привязкой» их в начале программы к конк­ретным линиям SDA, SCL и DNC. SDA и SCL соответствуют линиям данных и тактирования шины SMBus. DNC является одновременно линиями SCL и SDA.