Может кому-то будет интересно...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Sot 20 июня 2003 г. 11:15
В ответ на: Ответ: отправлено Freeman 19 июня 2003 г. 20:26

= RU.EMBEDDED (2:5020/1877.72) RU.EMBEDDED ====================================
Сооб : 601 из 601 Snt Loc
От : Konstantin Konstantinov 2:5020/1877.72 04 окт 02 14:24
Кому : Andy Mozzhevilov
Тема : Franklin Software C+ASM
===============================================================================
Привет Andy.


04 окт 02 09:02, Andy Mozzhevilov -> Ilja Vlaskin:

[...skipped...]

AM> стаpых хочется быть yвеpенным в инстpyменте. Самые новые веpсии,
AM> возможно и имеют смысл, если нyжна поддеpжка каких-нибyдь аппаpатных
AM> особенностей новых кpисталлов, типа нескольких dptr.

Вобщем согласен, но оптимизация (упаковка) в новых версиях начиная с 6.12 много
лучше, хотя ей далеко до ручной. А насчет второго DPTR бабушка надвое сказала.
Hедавно столкнулся с проблемой в at89s8252, включил оный, вроде все путем.
Решил проверить WDT, логика пересброса его в программе такова: есть задающий
тамер, посылающий событие каждые 0.02 сек по перерыванию разумеется, есть
обработчик событий в основной программе, по приходу которого происходит
очередной толчек WDT. В качестве теста зациклил основную программу по нажатию
одной из кнопки, индикация застыла, процессор не пересбросился :( Hачал
смотреть листинги, и что я там вижу, в начале каждого обработчика прерывания
есть следующая команда ANL WMCON,#0FBH, и тут я все понял. Для справки:

WMCON-Watchdog and Memory Control Register
WMCON Address = 96H Reset Value = 0000 0010B

PS2 PS1 PS0 EEMWE EEMEN DPS WDTRST WDTEN
Bit 7 6 5 4 3 2 1 0

DPS Data Pointer Register Select. DPS = 0 selects the first bank of Data
Pointer Register, DP0, and DPS = 1 selects the second bank, DP1

WDTRST
RDY/_BSY
Watchdog Timer Reset and EEPROM Ready/Busy Flag. Each time this bit is set to
"1" by user software, a pulse is generated to reset the watchdog timer. The
WDTRST bit is then automatically reset to "0" in the next instruction cycle.
The WDTRST bit is Write-Only. This bit also serves as the RDY/_BSY flag in a
Read-Only mode during EEPROM write. RDY/_BSY = 1 means that the EEPROM is ready
to be programmed. While programming operations are being executed, the RDY/_BSY
bit equals "0" and is automatically reset to "1" when programming is completed.

Читая WMCON, считывается флаг RDY/_BSY = 1 (если нет записи в EEPROM), далее
ANL *,#0FBh (выбирает первый DPTR), далее запись в порт модифицированного
значения плюс флаг RDY/_BSY, только теперь это WDTRST = 1. Таким образом WDT
пересбрасывается в любом обработчике прерывания, у меня их 4, без моего
разрешения. Убрал использования второго DPTR, код примерно остался тотже,
библиотечные функции типа memcpy разумеется замедлились, зато никакого не
санкционированного пересброса WDT.


Kosty K.

--- GoldED+/W32 1.1.5
* Origin: ip.point (2:5020/1877.72)

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

Ответы



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

E-mail: info@telesys.ru