Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› необходимо перепрограммировать таймера 8253/8254 IBM PC
Посл.ответ Сообщение

Ранг: 3.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 26 октября 2011 20:19
· Личное сообщение · #1

Приветствую всех, необходимо перепрограммировать таймера 8253/8254 IBM PC, так чтобы можно было делать замеры времени до миллисекунды.
Задача в том чтобы изменение счетчика вступило в силу только после завершения текущего цикла. Перепробовал все режимы, счетчик сбрасывается после занесения в порт старшего байта и устанавливает сразу новое значение.
Особое внимание уделял 2 режиму (программируемый генератор импульсов;) и 5 (аппаратно-запускаемый одновибратор)
Использую: Dos, код пишу на pascal.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 30 октября 2011 12:55
· Личное сообщение · #2

Особое внимание уделял 2 режиму
Лучше удели внимание коду и покажи его. Вот как ты представляешь ответ: я глянул в хрустальный шар и увидел - ошибка в строке 17



Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 30 октября 2011 13:19 · Поправил: bowrouco
· Личное сообщение · #3

GraB
> Задача в том чтобы изменение счетчика вступило в силу только после завершения текущего цикла.
Значит по завершению цикла устанавливайте новые настройки.

tundra37
Что вам даст код, нужно знать как прогать этот таймер(PIT я так понимаю). Вот я например бикал спикером через этот таймер:
Code:
  1.          in al,61h
  2.          and al,11111100b
  3.          out 61h,al
  4.          mov al,10110110b
  5.          out 43h,al
  6.          finit
  7.          fldz
  8.          fild Clock
  9.          fidiv Freq
  10.          fist Durat
  11.          mov eax,Durat
  12.          out 42h,al
  13.          jmp short $+2
  14.          mov al,ah
  15.          out 42h,al
  16.          jmp short $+2
  17.          in al,61h
  18.          or al,00000011b
  19.          out 61h,al

Понятно чтонибудь из этого



Ранг: 3.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 октября 2011 16:54
· Личное сообщение · #4

Всё ясно как простая гамма, спасибо за помощь, действительно, работает так как нужно. Всё оказалось на много проще, чем я думал.



Ранг: 3.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 ноября 2011 22:04
· Личное сообщение · #5

всё-таки проблема осталась, при считывании счётчика трижды происходит сбрасывание.
вот код:
функция инициализации
port[$43]:=$0;
port[$43]:=$36;
port[$40]:=$a9;
port[$40]:=$4; {1193 по умолчанию}


функция переустановки счётчика

port[$43]:=$0;
cl1:=port[$40];
ch1:=port[$40];
{результат cl1 = 40h ch1= 2h}

port[$43]:=$0;
port[$40]:=a;
port[$40]:=b;
{значение счетчика варьируются от 1193 до 1194 }

port[$43]:=$0;
cl2:=port[$40];
ch2:=port[$40];
{результат cl2 = 20h ch2= 2h}

{читаем ещё}
port[$43]:=$0;
cl3:=port[$40];
ch3:=port[$40];
{результат cl3 = a8h ch3= 4h - сбросился}

бывают такие казусы, что на втором чтении значение результата cl2 = a9h ch2= 4h, но на третьем
всё хорошо cl3 = 01h ch3= 2h

использую прерывание 8, IRQ0 - прерывание интервального таймера, возникает, может оно воздействует на счетчик ?


 eXeL@B —› Программирование —› необходимо перепрограммировать таймера 8253/8254 IBM PC
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати