Управление i8254 таймером

Тема в разделе "WASM.ELECTRONICS", создана пользователем 10110111, 31 мар 2007.

  1. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Почему вроде бы, простейший код приводит к зависанию таймера? Ведь по докам всё сходится - я всего-то перепрограммирую канал 0, чтобы IRQ0 генерировалось с частотой 1193180 герц! Причем результат не зависит от делителя - даже если писать 65535, всё равно зависнет!
    Код (Text):
    1. org 100h
    2. mov al,30h
    3. out 43h,al
    4. mov al,1
    5. out 40h,al
    6. mov al,0
    7. out 40h,al
    8. retn
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    [offtop:] код под дос? тогда мб int 20h вместо retn
     
  3. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Great
    При запуске com-программы на вершине стека word 0, а в [cs:0] word 20CD, так что это праильно
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    занятно
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Вы ставите счетчику режим 0, чтобы счётчик сам перезагружался, т.е. работал как генератор меандра, что и необходимо для вызова IRQ0, надо поставить его в режим 3. Не забудьте, что после перепрограмирования нарушится работа флоппиков и скорость хода часов, а может быть и с хардами возникнут пробл деелитель чаемы, то есть перепрограмируют его только на время работы программы, а потом опять ставят коэф. счёта =0 (то есть 65536).
    Зы могу запостить подробную доку по таймеру
     
  6. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Vov4ick
    Запостите pls на 10110111(_at_)mail.ru
     
  7. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    10110111 приветик! :)
    Ну вот тебе код из моей ос... вылизано и тестено вдоль и поперек
    Код (Text):
    1. SetAXdelayTimer:
    2.         pushf
    3.         push    ax
    4.         mov     al, 0x34        ; выбрать счетчик 0, шестнадцатеричный счет, загрузить младший байт, затем старший
    5.         cli                     ; запрет прерывания на время настройки таймера
    6.         out     0x43, al
    7.         pop     ax
    8.         out     0x40, al        ; младший байт
    9.         mov     al, ah
    10.         out     0x40, al        ; старший байт
    11.         popf
    12.            RET
     
  8. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    VaStaNi
    Да, спс, я это уже нашёл. Моя ошибка была, как и указал Vov4ick, в режиме таймера.
    Vov4ick
    Работа устройств типа флоппика ведется с использованием данных из BIOS Data Area, а не сигналов таймера как таковых, правильно я понял?
     
  9. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    правильно
     
  10. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Правильно, но там они берутся практически из таймера - обработчик int8 каждый раз (55 мсек) делает инкремент DWORD'а на 40h:6ch и декремент времени работы мотора дисковода на 40h:40h. Cчётчик тиков 40h:6ch используется и при работе с НЖМД для ожидания готовности, для формирования задержек, короче очень много где используется.
     
  11. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Насчет этого не знал, спасибо, учту...
    То есть достаточно с необходимой частотой вызывать старый ISR, и всё будет работать по-прежнему верно, независимо от частоты таймера?
     
  12. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Да. Это про нулевой его канал, выход которого заведён на IRQ0. А зачем перепрограммировать таймер надолго? По-моему вызов IRQ0 с частотой ~1,2 МГц приведёт к очень заметным тормозам системы.Если его обработчик будет выполнятся больше 2000 тактов, то 2,4 ГГц система зависнет тут же от переполнения стека, не говоря уж о более медленных машинах.
     
  13. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Мне не особо понравится, если частота смены контекста будет 18.206481 раза в секунду... Неужели все оси используют эту частоту? По-моему, сменяется контекст гораздо чаще... похоже, я ошибаюсь?
     
  14. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    А зачем нужна смена чего-либо со столь стабильной частотой? Все "многозадачные" ОС (окна, пингвины и др.) меняют так часто, как могут, либо ограничивают частоту обновления выделением процессорного времени. по-моему так. А такое постоянство возможно только в DOS.
     
  15. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    10110111 да, ты совершенно прав 18 раз в сек это игрушки и для игрушечно-демонстративного написания и как пример пойдет, но...
    НО для действительно продуманных многозадачных систем, да еще и вытеснения по приоритетам, да еще если проектирование позиционируется на(как) RTOS, то тут масса методов, идей, решений и лучше изучить их перед тем как...
    Рекомендую твоему вниманию UzhOS: статьи и посты его генерала - Сергея Семанина, как лучшее отечественное решение(направление) в этом вопросе.
    Проштудируй это:
    http://board.sysbin.com/viewtopic.php?t=319
    http://board.sysbin.com/viewtopic.php?t=249
    http://www.uzhos.tk/
    А вообще не дури :) все равно ведь придешь к тому, что сообща в этом(таких) деле больше толку. Разве что хорошая лабораторная работа это твой максимум в devOS и всё. :)
     
  16. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    С одной стороны это так, если иметь ввиду скорость разработки... но мне надо знать точно, что делает и как работает моя ОСь, а это будет затруднено при работе сообща(в смысле, если код будет писан многими людьми).
    Ну почему же максимум:) На свете столько ОСей, что изучая их, можно компоновать самые лучшие решения и интегрировать в свою ОСь... правда решений этих столько, что одному с ними надо будет долго возиться :).
    Тем более, если будет включена поддержка Win32 API и подобных прослоек, такая ОСь может быть намного большим, чем лабораторной работой.
    P.S. А за ссылки THX :)