Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 1 2. Интерфейс SPI 327 ных переходов. В досrупной литераrуре я ни разу не встречал примеров с реализа­ цией прерывания SPI ни на С, ни на ассемблере, т. к. обычная последовательная процедура куда проще в отладке - учитывая особенно, что в протоколе обмена по SPI с конкретными устройствами сама по себе посылка-прием байта протекает быстро. И в большинстве случаев посылка - еще не самое главное в программе, т. к. бывает обставлена всякими дополнительными условиями. П рограммны й вариант Программный вариант процедур чтения/записи более громоздок, но зато позволяет задействовать любые удобные выводы портов МК (в том числе у таких контролле­ ров, которые вообще аппаратного SPI не имеют, как многие Tiny, включая и «лю­ бимую» ATtiny23 1 3) . Здесь не требуется особой инициализации, кроме формирова­ ния направления работы соответствующих выводов . Листинг 1 2 . 5 иллюстрирует, как будет выглядеть чтение/запись для «мастера» в варианте, соответствующем режиму О . . equ CS = О ; выводы PortB . equ MOSI = 1 . equ MISO = 2 . equ SCK = 3 ; инициализация SPI ; установка MOS I , SCK, CS на выход ldi temp , ( l«CS ) 1 ( l«MOSI ) 1 ( l«SCK) out DDRВ , temp сЬi PORTB , SCK сЬi PORTB , MOSI sЬi PORTB , CS ; чтение/запись RW_spi : ; запись /чтение через SPI посЫJiаемый байт в data_out , ; принимаемый в data in cli ; на случай , если в программе есть длинные прерывания , ; иначе можно удалить ldi temp , 8 ; счетчик битов clr data in spi_loop : l s l data out ; старший бит в перенос brcc put_O ; если в переносе О - перейти sЬi PORTB, mosi nop ; задержка на один такт rjmp r Ьit

RkJQdWJsaXNoZXIy MTExODQxMg==