Софтовый I2C
Добавлено: Ср июн 10, 2009 13:35:49
Понадобился мне софтовый I2C. Взял пример из апноты avr300.asm
Отправка данных мастером работает, чтение одного байта тоже работает.
А вот при попытке прочитать два байта, в первом есть данные, а второй всегда равен 0x00
Во втором байте точно должен быть не 0, проверял с аппаратным I2C на Mega8.
Вот сам код:
Проверял и на макетке и в протеусе, везде одинаково.
Отправка данных мастером работает, чтение одного байта тоже работает.
А вот при попытке прочитать два байта, в первом есть данные, а второй всегда равен 0x00
Вот сам код:
Код: Выделить всё
;Адрес I2C + write и Старт
ldi i2cadr,0b10011110+i2cwr
rcall i2c_start
;Адрес ячейки и Отправка
ldi i2cdata,$A2
rcall i2c_do_transfer
;Адрес I2C + read и Повторный старт
ldi i2cadr,0b10011110+i2crd
rcall i2c_rep_start
;Чтение
;Этот байт читается, после него ACK
rcall i2c_do_transfer
mov r18,i2cdata
sec
;Чтение
;В этом байте всегда 0x00 ( почему? ), после него NACK
rcall i2c_do_transfer
mov r19,i2cdata
;STOP
rcall i2c_stop