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

Шаг 6. Осваиваем все возможности микроконтроллера ATtiny23 13 499 Пример операции SPI для ведомого устройства Следующий программный пример (см. Листинг 6.19) показывает, как можно использовать модуль SPI в качестве ведомого устройства SPI. Листинг 6.19. Пример на языке Ассемблер init . ldi г16, (1«USIWMO) I (1«USICS1) out USICR, r16 SlaveSPITransfer out USIDR, r16 ldi r16, (1«USIOIF) out USISR. r16 SlaveSPITransfer loop. sbis USISR,USIOIF rjmp SlaveSPITransfer loop in r16,USIDR ret Приведенный выше пример программы оптимизирован по размеру. Он состоит всего из восьми команд (плюс команда ret). Данный при ­ мер предполагает, что вывод DO сконфигурирован как выход, а вывод USCK — как вход. Байт данных, предназначенный для передачи с ведо ­ мого на ведущее устройство, перед вызовом функции должен быть поме ­ щен в регистр г 16. После завершения работы функции данные, получен ­ ные от ведущего устройства, также сохраняются в регистре г16. Принцип действия в двухпроводном режиме Двухпроводный канал USI не имеет никаких ограничений по скоро ­ сти передачи сигнала на выходе, но имеет систему подавление помех на входе. Название контактов, используемых в этом режиме: SCL; SDA. На рис. 6.44 показаны два модуля USI, соединенные между собой кана ­ лом USI, работающим в двухпроводном режиме. Один из этих модулей выступает в роли ведущего (Master), а второй — в роли ведомого (Slave). Как видите, изменение схемы подключения вызвало также измене ­ ние на уровне аппаратной части канала. Основное различие в работе устройств Master и Slave на этом уровне состоит в способе их синхрони ­ зации. Во всех случаях тактовый сигнал вырабатывает Master, a Slave исполь ­ зует специальный модуль синхронизации. Генерация тактового сигнала должна производиться программным путем, при этом операция сдвига происходит автоматически, одновременно для обоих устройств. Внимание. В данном режиме для синхронизации операция сдвига обычно проис ­ ходит по заднему фронту синхроимпульса.

RkJQdWJsaXNoZXIy MTExODQxMg==