|
переход с AT89S8252 на AT89S8253, взаимодействие с EEPROM |
|
|
|
 |
Ответов
(1 - 8)
|
Aug 18 2006, 07:57
|
Участник

Группа: Свой
Сообщений: 64
Регистрация: 18-05-06
Пользователь №: 17 211

|
Цитата(_VoRoN_ @ Aug 17 2006, 20:04)  Если кто сталкивался с такой проблемой, поделитесь пожалуйста опытом, касательно изменения существующих программ под новый чип, особенно в части взаимодействия с EEPROM.  Посмотрите по ссылке в статье п. 17.2 отличия ЭСППЗУ http://www.ineltek.ru/html.cgi/txt/publ/_ineltek/recom.htm
|
|
|
|
|
Aug 22 2006, 12:35
|

Участник

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530

|
Цитата(Andy-L @ Aug 18 2006, 11:57)  Цитата(_VoRoN_ @ Aug 17 2006, 20:04)  Если кто сталкивался с такой проблемой, поделитесь пожалуйста опытом, касательно изменения существующих программ под новый чип, особенно в части взаимодействия с EEPROM.  Посмотрите по ссылке в статье п. 17.2 отличия ЭСППЗУ http://www.ineltek.ru/html.cgi/txt/publ/_ineltek/recom.htmДа, на эту ссылку я уже натыкался, но вот проблемы это не решило.
|
|
|
|
|
Aug 23 2006, 05:56
|

Участник

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530

|
Цитата(K_AV @ Aug 22 2006, 16:55)  Мне в другом месте уже пояснили (не относительно этого чипа, а в общем) таким образом: Это только _возможность_ писать целую страницу целиком (т.е. НЕ 32 байта, а ДО 32 байт за раз). Косвенно это подтверждается тем, что в даташите написано, что при работе программы (изнутри чипа) обеспечивается автоматическое стирание при записи каждого байта EEPROM. Я попробовал - побайтная запись изнутри программы в отдельные ячейки EEPROM заработала в старой программе (написанной для 89S8252)без дополнительных переделок программы. Все, что сделал - поправил символические имена регистров спецфункций (раньше регистр управления был общий для EEPROM и WDT, теерь - раздельный). А как вы осуществляли проверку состояния (rdy/bsy)? И начало и окончание записи, или только окончание?
|
|
|
|
|
Dec 4 2006, 13:00
|
Группа: Участник
Сообщений: 14
Регистрация: 18-01-06
Пользователь №: 13 317

|
Цитата Заработала побайтная запись. Действительно необходимо ожидать начала и окончания записи. А так, отличия от at 89S8252 только в регистрах настроек eeprom и сторожевого таймера. Если быть точным, то надо сначала записать 1 байт, потом проверить RDY/BUSY == 1, потом RDY/BUSY == 0, а затем RDY/BUSY = 1, и только после этого что-то делать.
|
|
|
|
|
Dec 8 2006, 18:59
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040

|
Цитата(Pretorianec @ Dec 4 2006, 13:00)  Если быть точным, то надо сначала записать 1 байт, потом проверить RDY/BUSY == 1, потом RDY/BUSY == 0, а затем RDY/BUSY = 1, и только после этого что-то делать. У жука 8253 почему-то медленно сбрасывается флаг RDY/BUSY. Поэтому, после начала записи надо дождаться RDY=0, потом дождаться RDY=1. Это будет означать, что байт записан и можно начинать следующую операцию записи. Например, приблизительно так (IAR C): Код /*-------------------------------------*/ void eeprom_rdy (void) { for (;;) {if ((EECON & (1 << EERDY)) != 0) break;} } /*-------------------------------------*/ void eeprom_rdy0 (void) { for (;;) {if ((EECON & (1 << EERDY)) == 0) break;} } /*-------------------------------------*/ write_byte (word ad, byte dat) { data byte *pxdata;
pxdata = (byte *) (0x010000 | ad);
DI EECON |= (1 << EEMEN) | (1 << EEMWE); EI
*pxdata = dat;
eeprom_rdy0 (); eeprom_rdy ();
DI EECON &= ~((1 << EEMEN) | (1 << EEMWE)); EI } /*-------------------------------------*/
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|