Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программирование Watchdog Timer

7.5K
31 мая 2010 года
Dmitryl
55 / / 19.06.2007
В Winbond W83627EHG есть функция "сторожевого пса".
Задается интервал таймера, запускается таймер. Когда таймер сработал происходит перезагрузка системы. Мне это нужно для того, чтобы перезагружаться при зависании программы(программа постоянно сбрасывает таймер).
Открыл прямой доступ к портам с помощью GIVEIO.sys.
Написал на TASM вставку(вставка в программу на BCB 6.0), которая запускает таймер с 2-ух сек. интервалом:
Код:
_asm
    {
        // выбираем логическое устройство - WDTO#
             mov dx, 0x07
             mov al, 0x08
             out dx, al
        // активируем WDTO#
    mov dx, 0x30
    mov al, 0x01
    out dx, al
        // настройка: нет ускорения счета, подсчет секунд
             mov dx, 0xf5
             mov al, 0x00
             out dx, al
        // запрещаем сброс (не в 0, а в нач. зн.) счетчика по прерыванию от мыши и клавиатуры
                //mov dx, 0xf7
                //mov al, 0x00
                //out dx, al
        // запускаем двухсекундный таймер
              mov dx, 0xf6
              mov al, 0x02
              out dx, al
    }

Вставка не сработала: система через две секунды не перезагрузилась.
Пробовал использовать еще функцию ресета, но тоже не сработало.
Подскажите пожалуйста в чем причина?
PS:Ссылка на datasheet:
http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83627EHF_W83627EHG.pdf
7.5K
10 июня 2010 года
Dmitryl
55 / / 19.06.2007
Задача решена! Все оказалось не так просто, помог кусочек кода драйвера присланого производителями IOWA-8522.
3-ех секундный watchdog:
Код:
_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
                        }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог