[an error occurred while processing this directive]
HELP mtga128 twi<->24c256 что не так?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено m16 24 июня 2005 г. 19:17

чтение из 24с256 - без проблем (прошивал через лошадь тестовый код)
записывает блоками если между этими записями делаю паузу jtag-ом


;--------------------------------------------------------------------
; запись (блоками по 64 байта) EEPROM
;
; xl xh - адрес RAM
; yl yh - адрес ячейки EEPROM
; zl zh - длина блока
; tempC - адрес eeprom
; tempA,tempB,tempD,data - врем.
;--------------------------------------------------------------------

page_write_eeprom:

rcall twi_start
brne ERROR_W

rcall twi_sla_w
brne err_st

rcall twi_adr
brne err_st

ldi tempD,64

pwe:
ld data,x+
sts TWDR,yl;data
ldi tempA, (1< sts TWCR, tempA
rcall wait_int_twi
cpi tempA,0x28
brne ERROR_W
dec tempD
brne pwe

rcall twi_stop

adiw yl,32
adiw yl,32

sbiw zl,32
sbiw zl,32

mov tempA,zl
or tempA,zh
brne page_write_eeprom

ret


err_st: ;rcall twi_stop
ERROR_W: ;cpi tempA,0x20
;breq page_write_eeprom
rjmp ERROR_W
;----------------------------------------------------------------------

wait_int_twi:
lds tempA,TWCR
sbrs tempA,TWINT
rjmp wait_int_twi
lds tempA,TWSR
andi tempA, 0xF8
mov tempB,tempA
ret
;---------------------------------------------------------------------

twi_start:
ldi tempA,(1<sts TWCR, tempA ;
rcall wait_int_twi ;
cpi tempA, 0x08 ;
breq er_tw_s
cpi tempA, 0x10
er_tw_s: ret
; Z=1 - gud Z=0 -ERROR

;---------------------------------------------------------------------

twi_stop:
ldi tempA,(1<sts TWCR, tempA
ret
;---------------------------------------------------------------------

; tempC - адрес eeprom
twi_sla_w:
mov tempA,tempC
andi tempA,0xFE ; SLA-W
sts TWDR, tempA
ldi tempA, (1< sts TWCR, tempA
rcall wait_int_twi
cpi tempA,0x18
ret ; Z=1 - gud Z=0 -ERROR
;---------------------------------------------------------------------
; yl yh - адрес ячейки EEPROM

twi_adr:
sts TWDR,yh ; h-ADR
ldi tempA, (1< sts TWCR, tempA
rcall wait_int_twi
cpi tempA,0x28
brne er_tw_adr

sts TWDR,yl ; l-ADR
ldi tempA, (1< sts TWCR, tempA
rcall wait_int_twi
cpi tempA,0x28
er_tw_adr:
ret ; Z=1 - gud Z=0 eRROR


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru