Важная информация

User Tag List

Показано с 1 по 10 из 15

Тема: Часы реального времени.

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Часы реального времени.

    Поскольку в следующей версии "эмулятора ДВК" появится устройство HC, реализующее концепцию "блочных часов реального времени" - есть смысл обсудить некоторые подробности.

    Главная особенность предлагаемой концепции в том, что часы реального времени реализуются как контроллер одноблочного диска, позволяющий читать или писать "блок времени" переменной длины. В эмуляторе ДВК - HC будет работать через интерфейс HD по командам "прочитать таймблок" и "записать таймблок". HD t1, t2 и t3 будут читать/писать блок времени через прямой доступ к ОЗУ, а HD t4 и t5 - получать/отдавать таймблок через регистр данных.

    Поскольку таймблок может иметь произвольную длину - первым словом блока должна идти его длина в байтах. Это слово должно не только находиться в начале программного буфера при его отдаче контроллеру через ДМА, но и передаваться первым словом пакета в случае записи блока времени в контроллер через регистр данных.

    Внутри "блока времени" после слова размера должна находиться информация о дате, потом информация о времени, а затем - служебная информация. Максимальный размер блока, поддерживаемый конкретной реализацией контроллера - зависит от объёма реализуемых функций. Минимальный контроллер позволяет только читать ( или читать и писать ) дату, а максимальный - читать и писать максимальный набор информации, предусмотренный текущей спецификацией таймблока.

    Если программа рассчитана на более продвинутую версию таймблока и пытается записать в контроллер слишком большой для него блок - контроллер считывает поддерживаемые им поля и выставляет бит ошибки в CSR с кодом ошибки "превышен размер блока" в регистре данных. Узнать поддерживаемую контроллером версию таймблока можно выполнив чтение - контроллер всегда отдаёт полный таймблок максимального поддерживаемого размера, который ( размер ) однозначно соответствует реализованной спецификации таймблока. Программа, наоборот - может писать в контроллер блоки любого размера, меньшего или равного размеру блока контроллера.


    Относительно конкретного формата таймблока однозначного понимания пока нет - возможный вариант выглядит так:

    Скрытый текст


    000000 Размер блока в байтах.

    000002 Номер года - int16, содержащий число лет в дате новой эры или отрицательное число лет в дате до новой эры ( номер 0 - недопустим, поэтому при записи означает запись блока времени без даты, а при чтении - отсутствие даты в контроллере ).

    000004 Номер месяца в диапазоне 1..12 или 0 - если дата в контроллере не установлена. -1 при записи = игнорировать это поле.

    000006 Номер дня в диапазоне 1..31 или 0 - если дата в контроллере не установлена. -1 при записи = игнорировать это поле.

    000010 Read Only Номер дня в неделе в диапазоне 1..7 ( 1 = понедельник, 7 = воскресенье ), 0 - если дата не установлена или -1, если контроллер не поддерживает день недели.

    000012 Номер часа в диапазоне 0..23 или ( при записи ) -1, если это поле не должно измениться при записи блока.

    000014 Номер минуты в диапазоне 0..59 или ( при записи ) -1, если это поле не должно измениться при записи блока.

    000016 Номер секунды в диапазоне 0..59 или ( при записи ) -1, если это поле не должно измениться при записи блока.

    000020 Номер миллисекунды в секунде в диапазоне 0..999 или -1, если контроллер не поддерживает это поле или оно не должно измениться при записи блока.

    000022 000024 Int32 - Номер миллисекунды после полуночи в диапазоне 0..86399999 или -1, если контроллер не поддерживает это поле. При записи игнорируется, если хотя бы одно из 4-х предыдущих полей не содержит -1.

    000026 000030 Int32 - Время в тиках от 0 до TickMax ( зависит от поля частоты тиков ) или -1, если контроллер не поддерживает это поле. При записи игнорируется, если хотя бы одно из 5 предыдущих полей не содержит -1.

    000032 Частота тиков ( Гц ) в диапазоне 1..10000 или -1, если контроллер не поддерживает это поле или оно не должно измениться при записи. При изменении этого поля - значение предыдущего поля пересчитывается для новой частоты.

    000034 Вектор циклического прерывания: 0 - прерывания запрещены, 0100..0464 - прерывания разрешены, -1 - контроллер не поддерживает генерацию этого прерывания или поле не должно измениться при записи.

    000036 Приоритет циклического прерывания в диапазоне 4..7 или -1, если контроллер не поддерживает приоритет циклического прерывания или поле не должно измениться при записи.

    000040 Коррекция 60 - Int16, содержащий число миллисекунд, прибавляемое к таймеру каждые 60 секунд с момента изменения времени или этого поля, или 0100000, если контроллер не поддерживает это поле или оно не должно измениться.

    000042 Коррекция 3600 - Int16, содержащий число миллисекунд, прибавляемое к таймеру каждые 60 минут с момента изменения времени или этого поля, или 0100000, если контроллер не поддерживает это поле или оно не должно измениться.

    000044 Коррекция 216000 - Int16, содержащий число миллисекунд, прибавляемое к таймеру каждые 60 часов с момента изменения времени или этого поля, или 0100000, если контроллер не поддерживает это поле или оно не должно измениться.

    000046 Коррекция 12960000 - Int16, содержащий число миллисекунд, прибавляемое к таймеру каждые 3600 часов с момента изменения времени или этого поля, или 0100000, если контроллер не поддерживает это поле или оно не должно измениться.

    000050 000052 Read Only Int32 - База 3600 - число секунд, прошедших с последнего изменения времени или поля "Коррекция 3600", 0 - если эта коррекция не активирована или -1, если контроллер не поддерживает это поле.

    000054 000056 Read Only Int32 - База 216000 - число секунд, прошедших с последнего изменения времени или поля "Коррекция 216000", 0 - если эта коррекция не активирована или -1, если контроллер не поддерживает это поле.

    000060 000062 Read Only Int32 - База 12960000 - число секунд, прошедших с последнего изменения времени или поля "Коррекция 12960000", 0 - если эта коррекция не активирована или -1, если контроллер не поддерживает это поле.
    [свернуть]


    Текущую спецификацию HC см. ЗДЕСЬ
    Последний раз редактировалось Patron; 02.11.2017 в 19:27.

  2. Этот пользователь поблагодарил Patron за это полезное сообщение:

    hobot (22.03.2020)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 190
    Последнее: 10.05.2018, 18:52
  2. PseudoTR-DOS для NEMO IDE без реального TR-DOS %)
    от fan в разделе Внешние накопители
    Ответов: 14
    Последнее: 15.01.2010, 16:01
  3. Ответов: 74
    Последнее: 09.07.2009, 12:39
  4. Spectrum как система реального времени
    от King of a S†ellar War в разделе ZX Концепции
    Ответов: 55
    Последнее: 21.12.2008, 19:57

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •