В Winbond W83627EHG есть функция "сторожевого пса". Задается интервал таймера, запускается таймер. Когда таймер сработал происходит перезагрузка системы. Мне это нужно для того, чтобы перезагружаться при зависании программы(программа постоянно сбрасывает таймер). Открыл прямой доступ к портам с помощью GIVEIO.sys. Написал на TASM вставку(вставка в программу на BCB 6.0), которая запускает таймер с 2-ух сек. интервалом: Код (Text): _asm { // выбираем логическое устройство - WDTO# mov dx, 0x07 // 0x07 mov al, 0x08 out dx, al // активируем WDTO# mov dx, 0x30 mov al, 0x01 out dx, al // настройка: нет ускорения счета, подсчет секунд mov dx, 0xf5 mov al, 0x00 // 00000000 out dx, al // запрещаем сброс (не в 0, а в нач. зн.) счетчика по прерыванию от мыши и клавиатуры //mov dx, 0xf7 //mov al, 0x00 //out dx, al // запускаем двухсекундный таймер mov dx, 0xf6 mov al, 0x01 out dx, al } Вставка не сработала: система через две секунды не перезагрузилась. Пробовал использовать еще функцию ресета, но тоже не сработало. Подскажите пожалуйста в чем причина? PS:Ссылка на datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83627EHF_W83627EHG.pdf
BarDimS Я нихрена не знаю что ты там такое делаешь, видимо пытаешься использовать какую-то спецфункцию какого-то чипсета. Но вот что можно сказать из общих соображений: - Если ты настроил свою "сторожевую кошку" то что произойдет по истечении интервала? В приведенном тобой коде я не вижу установки какого-либо обработчега и самого обработчега тоже. Будет сгенерировано прерывание? Какое? Кто его будет обрабатывать и перезагружать систему в твоей схеме? - Ты пытаешься напейсать сразу весь комплекс но помни что винда может сбросить настройки какого-либо порта, она может получить это прерывание (если это прерывание) и просто подавить его... короче ожидай что в твой user32 код вмешается винда причем самым непредсказуемым способом. Лучше всего сначала все отладить в DOS; - Зачем открывать порты на доступ user32 приложению? Если ты так уверен что твои дела с этими портами абсалютна уникальны и ничему системному не помешают - почему бы не написать простой драйвер который ничего не делает окромя как на запуске устанавливает сторожа? Рекомендую простейшего бипера из одной из первых стотей Four-F. Скомпелять его на асме (FASM) не должно занять многа времени; - Если ты установил сторожа то как ты проверяешь что ты его действительно установил? Опять - проверка в DOS.
Winbond W83627EHG - чипсет на IOWA-8522 от IEI Technology Corp. Срабатывает watchdog аппаратно: нет никаких прерываний и их обработчиков! Используя datasheet я что-то стабильно делаю неправильно: не сработал ресет, ChipID прочиталось не то которое нужно. Ошибка в чем-то основнопологающем!
BarDimS Нужно проинициализировать pin77 как говорит baldr // set pin77 as WDT function mov dx, 0x2D in al, dx and al, 0xFE // ???????0 out dx, al mov dx, 0x07 mov al, 0x08 out dx, al mov dx, 0x30 mov al, 0x01 out dx, al mov dx, 0xF5 in al, dx and al, 0xE7 // ???00??? out dx, al mov dx, 0xF6 mov al, 0x05 // 5 sec out dx, al mov dx, 0xF7 mov al, 0x00 out dx, al Во время работы при большой нагрузке "таймера с 2-ух секундным интервалом" может быть мало.
Задача решена! Все оказалось не так просто, помог кусочек кода драйвера присланого производителями IOWA-8522. 3-ех секундный watchdog: Код (Text): _asm { // записали адрес, равный 0x87 (начальная стадия входа) mov dx, 0x2e mov al, 0x87 out dx, al // записали адрес, равный 0x87 (конечная стадия входа) mov dx, 0x2e mov al, 0x87 out dx, al // записали адрес, равный 0x07 (шаг 1 выбора устройства) mov dx, 0x2e mov al, 0x07 out dx, al // записали по адресу 0x07 значение 0x08 (шаг 2 выбора устройства) mov dx, 0x2f mov al, 0x08 out dx, al // записали адрес, равный 0x30 (шаг 1 активации устройства) mov dx, 0x2e mov al, 0x30 out dx, al mov dx, 0x2f in al, dx or al, 0x01 // записали по адресу 0x30 значение 0x01 (шаг 2 активации устройства) out dx, al // записали адрес, равный 0xf5 (шаг 1 настройки устройства) mov dx, 0x2e mov al, 0xf5 out dx, al mov dx, 0x2f in al, dx and al, 0xe7 // записали по адресу 0xf5 значение ???00??? (шаг 2 настройки устройства) out dx, al // записали адрес, равный 0xf7 (шаг 1 запрета сброса от прерываний мыши и клавиатуры) mov dx, 0x2e mov al, 0xf7 out dx, al mov dx, 0x2f in al, dx and al, 0x3F // записали по адресу 0xf7 значение 00??????b (шаг 2 запрета сброса от прерываний мыши и клавиатуры) out dx, al // записали адрес, равный 0xf6 (шаг 1 запуска устройства) mov dx, 0x2e mov al, 0xf6 out dx, al // записали по адресу 0xf6 значение 0x03 (шаг 2 запуска устройства) mov dx, 0x2f mov al, 0x03 out dx, al // записали адрес, равный 0xAA = вышли mov dx, 0x2e mov al, 0xAA out dx, al }