Суть проблемы: есть диспей от Motorola C450 (SSD1770). Работать с ним можно в режиме SPI (кстати, среди аппаратного функционала в дисплее есть интересные вещи, вроде скола и прорисовки простейший фигур). Штука, конечно, древнее дерьма мамонта, но жизнь заставляет юзать её совместно с ATTiny2313. В нём мы не располагаем SPI, имеем только USI.
Честно читал даташит, честно понял, что SPI можно реализовать через 3-wired USI. Честно НЕ ПОНЯЛ, что происходит в примере на асме. Каюсь, я программист на высокоуровневых языках. Если не затруднит, киньте в меня перелопаченным примером на C
UPD: сам ASM-код из даташита:
Код: Выделить всё
SPITransfer:
out USIDR,r16
ldi r16,(1<<USIOIF)
out USISR,r16
ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
SPITransfer_loop:
out USICR,r16
sbis USISR,USIOIF
rjmp SPITransfer_loop
in r16,USIDR
ret


