Всем здрасти! Пытаюсь подружить драйвер дисплея SSD1306 и ATMEGA328p с использованием i2c. По даташиту после каждого байта данных или команды, SSD1306 должен генерировать бит подтверждения, но после отправки первого же пакета с командой ни "Acknowledge" ни "Not Acknowledge" бита не получаю, симуляция будто зависает. Подскажите пожалуйста может я что не так сделал? Может проблема симуляции?
Код
.include "m328PBdef.inc"
.def buff = r16
.def message = r17
.def iter = r18
.equ adressW = 0b01111000
.cseg
.org 0x0000
jmp restart
.org 0x001A
jmp tim1_ovf_isr
.org 0x0030
jmp twi_isr
restart: ldi buff, high(RAMEND)
out SPH, buff
ldi buff, low(RAMEND)
out SPL, buff
; twi init
ldi buff, 0b1100
sts TWBR0, buff
ldi buff, 0b0
sts TWSR0, buff
; timer\counter init
ldi buff, 0b100
sts TCCR1B, buff
ldi buff, 0b1
sts TIMSK1, buff
; global interrupt enable
sei
; main routine
main:
jmp main
; timer 1 - 16bit overflow isr
tim1_ovf_isr: ldi buff, 0b10100101
sts TWCR0, buff
ldi buff, 0b0
sts TCCR1B, buff
ldi buff, 0b0
sts TIMSK1, buff
reti
; twi isr
twi_isr: lds buff, TWSR0
andi buff, 0b11111000
cpi buff, 0x08
breq twi_start
cpi buff, 0x18
breq twi_slaw_ack
cpi buff, 0x28
breq twi_data_ack
reti
;
twi_start: ldi buff, adressW
sts TWDR0, buff
ldi buff, 0b10000101
sts TWCR0, buff
reti
;
;
twi_slaw_ack: ldi buff, 0b10000000
sts TWDR0, buff
ldi buff, 0b10000101
sts TWCR0, buff
reti
;
;
twi_data_ack: ldi buff, 0xA5
sts TWDR0, buff
ldi buff, 0b10000101
sts TWCR0, buff
reti
SSD1306-Revision 1.5.pdf