gor_mike
Feb 27 2005, 20:04
Кто-нибудь пробовал что-либо заносить во флэшку микроконтроллера DS89C420 из своей резидентной программы? Делаю все, как в даташите, но результат - ничего не заносится. Если кто-то превзошел сие - прошу на мыло gor_mike@mail.ru. Впрочем, буду продолжать попытки - отступать некуда. Если получится - сообщу. Всем удачи.
Получается только писать. Читаю пока на общих основаниях, как область кода. Фишка в том, что надо в FDATA писать адрес и байт максимально бысто друг за другом, например, из DATA, а после записи в FDATA байта проверять бит BUSY не сразу, а после задержки в несколько (например, 10) тактов. Читать из FDATA пока не получается.
mishkofefer
May 26 2005, 14:27
;************************************************************************
;* Declarations *
;************************************************************************
FCNTL EQU 0D5h
FDATA EQU 0D6h
TA EQU 0C7h
FBUSY EQU 10000000b
RD_MODE EQU 0000b ; read mode (default)
WR_BYTE EQU 1011b ; write upper program memory bank command
ERASE_UP EQU 1110b ; erase upper program memory bank command
SYS_RES EQU 1111b ; system reset command
;************************************************************************
IAP_WRITE:
MOV TA, #0AAh
MOV TA, #055h
MOV FCNTL, #WR_BYTE
MOV FDATA, DPH
MOV FDATA, DPL
MOV FDATA, A
MOV R1, #10H
DJNZ R1, $
F_WAIT:
MOV ACC, FCNTL ;wait for FBUSY=1
JNB ACC.7, F_WAIT
MOV TA, #0AAh
MOV TA, #055h
MOV FCNTL, #RD_MODE ;set read mode
AJMP HALT
;************************************************************************
IAP_ERASE:
MOV TA,#0AAh
MOV TA,#055h
MOV FCNTL,#ERASE_UP
MOV R1, #10H
DJNZ R1, $
F_WAITE:
MOV ACC, FCNTL
JNB ACC.7, F_WAITE
MOV TA,#0AAh
MOV TA,#055h
MOV FCNTL,#RD_MODE
AJMP HALT
It works...