ZX Element
#02
06 июня 1998 |
|
Чугуний - Часы в компьютере.
╔═════════════════════════╗ ║ ║ ║ ЧАСЫ В ВАШЕМ КОМПЬЮТЕРЕ ║ ║ ║ ╚═════════════════════════╝ Вашему вниманию предлагается описание микросхемы 512ВИ1, выпускаемой минским объединением "ИНТЕГРАЛ". Предназначено оно для тех, кто имеет некоторый опыт по рабо- те с начинкой Speccy или аналогичных уст- ройств. Так же оно будет полезно програм- мистам, решившим поддержать эту доработку Speccy. В следующем номере ZX-ELEMENT бу- дут опубликованы схема подключения ВИ1 к ZX, драйвер и назначение ячеек внутреннего ОЗУ, в котором будет записана конфигурация компьютера. Эта микруха создана для работы в соста- ве микропроцессорных систем в качестве ча- сов реального времени с будильником, кале- ндарем и ОЗУ емкостью 50 байт. Подключив ВИ1 к своему Speccy, вы сможете выводить на экран время и дату, упростится подсчет временных интервалов и т.п. 50 байт памяти достаточно, чтобы сохранить текущую конфи- гурацию машины (не придется методом тыка определять объем ОЗУ, адрес порта расшире- нйя и т. п.). 512ВИ1 выполнена в корпусе DIP-24 по КМОП технологии. Напряжение питания от 3 до 8В, потребляемый ток не более 50 мкА. Подключите +5В от Speccy и +3В от батаре- ек через диодную развязку - и все о'k! Ло- гические уровни-TTL, выходы держат токи нагрузки до 1ОмА. С кварцем на 32768 Гц время цикла записи или чтения не менее 1мкс и увеличивается до Smkc при питании от +3В. С точки зрения микропроцессора ( МП ) ВИ1 - это 64 ячейки памяти с адресами от 00Н до 3FH, которые доступны для записи и чтения. Исключения - ячейки с адресами ОСН и 0DH, старшие разряды ячеек 00Н и 0AH - их можно только считывать. МП записывает в ВИ1 начальные значения времени и даты, да- ет команду на запуск. После этого доста- точно считать значения ячеек для получения текущего времени и даты. Из-за отсутствия какого-либо стандарта на порты Speccy вы- делить 64 адреса для одного устройства без конфликтов с ранее созданными наворотами крайне сложно. (Пример - на многих машинах атоит 58OBB55A-порт принтера и KEMPSTON- джойстика, адреса 1FH, 3FH, 5FH, 7FH. А в ZX-FORMAT-6 появляется схема SOUND DRIVE, севшая на адреса 0FH-7FH. И если автор не предусмотрел в SETUPe своего прога запрос адресов новых устройств или их отключение, то проблемы с железом неизбежны. Но это я отвлекся). Поэтому ВИ1 подключена через порты 00DFH-запись адреса регистра и 00BFH -запись/чтение данных, что полностью ана- логично компьютеру PROFI. ------------------------------------------ Небольшое отступление касательно часов и PROFI. В одном из журналов прошла инфор- мация о том, что изготовители PROFI наве- сили часы на порты KEMPSTONE-MOUSE, из-за чего мышь не дышит. Видимо, писавший это не знаком с ВИ1. Порт мыши - xxDFH, часов- 00DFH. Различаются старшие байты адреса при полной адресации. Кроме того, мышь ра- ботает только на чтение, а порт 00DFH ча- сов только на запись. Так что при возник- новении глюков берите паяльник и делайте нормальный дешифратор портов ввода-вывода. ------------------------------------------ В таблице дается карта памяти ВИ1: +-----+-------------------+ |Адрес| Данные | Регистры A-D +-----V-------------------+ используются |00Н |Секунды. | для задания |01Н |Секунды будильника.| режима работы |02Н |Минуты. | микросхемы. |03Н |Минуты будильника. | Подробнее они |04Н |Часы. | будут рассмот- |05Н |Часы будильника. | рены ниже. |06Н |День недели. | Назначение ос- |07Н |Число. | тальных реги- |08Н |Месяц. | стров ясно из |09Н |Год. | таблицы. +-----V-------------------+ |0AH |Регистр A. | |OBH |Регистр В. | |ОСН |Регистр С. | |0DH |Регистр D. | +-----V-------------------+ |0EH- |ОЗУ общего | | 3FH |назначения. | +-----+-------------------+ С МП - системой ВИ1 связана через дву- направленную мультиплексированную шину адреса-данных. При работе с ВИ1 через два порта она подключается к шине данных Z80. С линиями управления работает схема сопря- жения, формируя необходимые сигналы при срабатывании дешифратора адреса порта вво- да-вывода. Ниже дается условное обозначение и опи- сание выводов 512ВИ1: +---+---+---+ Vss-напряжение пита- 22-+PS | |Vss+-24 ния. 18-+RES|RTC| | GND-общий. +---+ | | ADO-AD7-мультиплекси- 04-+ADO| |GND+-12 рованная двунаправлен- 05-+AD1| | | ная шина адреса/дан- 06-+AD2| | | ных. 07-+ADЗ| | | OSC1-вход тактового 08-+ADЧ| | | генератора (ТГ). 09-+ADS| | | OSC2-выход ТГ. 10-+ADб| | | CKFS-задание коэффи- 11-+AD7| | | циента деления для вы- +---+ | | хода CKOUT. 14-+AS | | | CKOUT-сигнал ТГ для 17-+DS | +---+ использования в других 15-+R/W| |IRQ+-19 устройствах. Он посту- 13-+СЕ | +---+ пает непосредственно +---+ |SQW+-23 (CKFS=1) или через де- 20-+CKFS CKOUT+-21 литель на 4 (CKFS=0). +---+ +---+ SQW-сигнал ТГ,подава- 02-+OSC1 OSC2+-03 емый через делитель. +---+---+---+ Разрешение сигнала и Коэффициент деления задаются МП при прог- раммировании регистров A-D. IRQ-запрос прерывания МП при возникнове- нии событий, требующих программной обра- ботки. Это окончание цикла обновления ин- формации в регистрах 00Н-09Н (происходит ежесекундно ), срабатывание будильника. Возможна генерация запросов с частотой сигнала на выходе SQW. Выход выполнен по схеме с открытым стоком. Из-за отсутствия в Speccy контроллера прерываний сей вывод совместно с SQW может использоваться для подачи звукового сигнала при срабатывании будильника. RESET-сброс. Сбрасывает в исходное состо- яние узлы ВИ1, отвечающие за связь с МП при подаче логического "0". Никакое вмеша- тельство МП в работу ВИ1 в это время не- возможно. На ячейки часов, календаря и ОЗУ не влияет. Длительность импульса логиче- ского "0" не менее Smkc при включении пи- тания. PS-вход датчика питания. Подключается та- ким образом, чтобы напряжение на нем па- дало до нуля даже при кратковременном про- падании питания. После возобновления пода- чи питания логический "0" на этом выводе должен продержаться не менее Smkc. При этом старший бит регистра D автоматически устанавливается в "0". Единицу можно уста- новить только считыванием данного регист- ра. Сей факт позволяет определить досто- верность информации в ячейках ВИ1. СЕ-выбор микросхемы.При подаче логической "1" шина AD, входы DS и R/W отключаются от МП, снижается потребляемая мощность. Низ- кий уровень выставляется во время действия импульса AS и остается неизменным до окон- чания цикла чтения/записи. Допускается постоянное подключение вывода к общему проводу. AS-строб адреса. Подается в виде положи- тельного импульса при наличии адреса на шине AD. По срезу импульса адрес записыва- ется во внутренний буфер ВИ1. Одновременно анализируется уровень на входе DS-строб данных, что определяет дальнейшую логику работы ВИ1. Если этот уровень равен "0", то во время положительного импульса DS проиойдет запись/чтение данных в соответ- ствии с уровнем на входе R/W - чтение при "1", а запись при "0". Если этот уровень равен "1"-для чтения подается отрицательный импульс DS (на вхо- де R/W "1"), а для записи отрицательный импульс подается на вход R/W (на DS "1"). Такая усложненная логика позволяет под- ключать ВИ1 к различным МП. Теперь самое время рассказать о прог- раммировании микросхемы, то есть о работе с регистрами A-D. Ниже показаны обозначе- ния значащих разрядов регистров и их опи- сание. Символом "*" обозначены разряды, кото- рые могут быть только считаны. Регистр A: UIP* (бит D7) Лог. "1" означает,что проис- ходит или произойдет через 2ЧЧмкс цикл объновления информации о времени. Сиг- нал RESET на него не действует. Запи- сав лог."1" в разряд SET регистра В, можно запретить обновление и тем са- мым сбросить UIP в "0". DUO-DU2 (биты D4-D6) Сюда записывается код 010, соответствующий кварцу на частоту 32768Гц. RSO-RSЗ (биты D0-D3) Код 0000 запрещает появление сигнала на выходе SQW. Дру- гие коды дадут сигнал с частотой от 2 до 8192Гц. Какой частоте какой код со- ответствует? Ниже дан список частот для кодов от 0001 до 1111(в герцах): 256, 128, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2. Регистр В: SET (бит D7) Лог. "1" в этом разряде зап- рещает обновление информации о време- ни, давая возможность записать нужные данные в регистры 00Н-09Н. Лог. "0" разрешает ВИ1 начать отсчет времени. PIE (бит D6) Разрешает прерывания с перио- дом, заданным разрядами RSO-RSЗ реги- стра A. Может быть сброшен сигналом RESET. AIE (бит D5) Разрешает прерывания от буди- льника. Может быть сброшен сигналом RESET. UIE (бит D4) Разрешение прерывания по око- нчании цикла обновления. Может быть сброшен сигналом RESET. SQWE (бит D3) Разрешение выдачи сигныла на выходе SQW. Может быть сброшен сигна- лом RESET. DM (бит D2) "1" означает, что данные о да- те и времени представлены в двоичном виде, "0"- в двоично-десятичном. Изме- нение этого регистра без перезаписи данных в регистрах 00Н-09Н невозможно. 24/12 (бит D1) "1" устанавливает 24-х ча- совой режим, "0"-12-часовой режим сче- та времени. В 12-часовом режиме время после полудня (РМ) отмечается еденицей в старшем разряде регистра часов 04Н. DSE (бит D0) "1" разрешает автоперевод на летнее время. В последнее воскресенье апреля после 01:59:59 автоматически устанавливается 03:00:00, а в послед- нее воскресенье октября после 01:59:59 устанавливается 01:00:00. Записью "0" вы запрещаете автоперевод. Регистр С. IRQF* (бит D7) Флаг запроса прерывания. Устанавливается при выполнении условия PF*PIE+AF*AIE+UF*UIE=1 Одновременно на контакте IRQ устанавливается низкий уровень. Флаг сбрасывается при чтении регистра С или сигналом RESET. PF* (бит D6) Устанавливается в "1" по фро- нту сигнала на внутреннем делителе, выбранном в соответствии с разрядами RSO-RSЗ регистра A. Флаг сбрасывается чтением регистра С или сигналом RESET. По моему, этот флаг можно использовать для отсчета временных интервалов дли- тельностью менее 1 секунды. AF* (бит D5) Флаг устанавливается при сов- падении текущего времени с временем, указанным в регистрах будильника. Флаг сбрасывается чтением регистра С или сигналом RESET. UF* (бит D4) Флаг устанавливается в "1" после окончания каждого цикла обновле- ния. Флаг сбрасывается чтением регист- ра С или сигналом RESET. Регистр D: VRT* (бит D7) Флаг устанавливается в "0" при низком уровне на входе PS. "1" ус- танавливается только считыванием ре- гистра D. Ну вот, с теорией закончили. Теперь даю инструкцию для по работе с ВИ1. ВНИМАНИЕ! При работе с ВИ1 используйте только полную адресацию портов, что умень- шит вероятность возникновения конфликтов со всем железом, которое уже стоит в вашей машине. Доступ к регистрам ВИ1 двухступен- чатый: сначала в порт 00DFH пишем адрес нужного регистра, затем через порт 00BFH пишем или читаем данные. Возможно, что на турбированных Speccy придется вводить до- полнительные команды NOP после записи ад- реса регистра, чтобы у ВИ1 была оговорен- ная в описании 1мкс для подготовки к при- ему/выдаче данных. За неимением турбо про- верить это не удалось, хотя опыт возни с нашими микрухами говорит о том, что в их описаниях обычно указывают не самые лучшие параметры и лишние NOРы понадобятся не всем ВИ1. Но, учитывая, что компы турбиру- ют сейчас до 14MHz, в своем драйвере я это учту. После включения питания в регистр A за- писывается код, соответствующий применен- ному кварцу и необходимой частоте на выхо- де SQW (или частоте периодических прерыва- ний). Для кварца на 32768Гц и частоты SQW 512Гц это код 00100111 (27Н). Затем в ре- гистр В заносится код с "1" в старшем раз- ряде,чтобы запретить ход часов. Остальные разряды определяют режим счета времени и генерации запросов прерывания. Например, код 10000010 (82Н) устанавливает 24-х ча- совой режим отсчета без автоперевода на летнее время с двоично - десятичным предс- тавлением данных; запрешены все прерывания и выдача сигнала на выход SQW. После этого в ячейки часов, календаря и будильника заносятся данные, с которых на- чинается отсчет. Значения должны заносится в формате, установленном в соответствующих разрядах регистра В. Например: десятичному числу 11 соответствует 00001011 (OBH) в двоичном коде или 00010001 (11Н) в двоич- но-десятичном. В 12-часовом режиме времени после полудня соответствует "1" в старшем разряде регистра часов. Например, коду 00000111 (07Н) соответствует время семь часов утра, а коду 10000111 (87Н) - семь часов вечера. Дни недели кодируются так: 1-воскресе- нье, 2-понедельник и т. д. Если отключен автоперевод на летнее время, то использу- ется кодировка, при которой 1-это понеде- льник, а 7-воскресенье. Месяцы кодируются как обычно: 1-январь, 2-февраль и т.д. Год задается двумя последними цифрами-1998 год записывается как 98 (62Н). Установив начальные значения, разрешаем ход часов. Для этого код в регистре В за- меняют таким же, но с нулем в старшем раз- ряде. При необходимости можно разрешить все или часть прерываний и выдачу сигнала на выход SQW. Первое обновление данных бу- дет через 0.5с после записи "0" в бит D7 регистра "В", а затем каждую секунду. Z80 равной 3.SМГц. Если необходимо проана- лизировать несколько флагов регистра С, то запомните его значение - все флаги после считывания регистра сбросятся. Чтение фла- га из регистра D поможет вам определить, пропадало ли напряжение питания и если да, то придется запрограммировать ВИ1 заново. Ну вот, все что мог - написал. За окном ночь и очень хочется спать. Если вы разоб- рались со всем тем бредом, что я тут напи- сал-отлично. А если нет-пишите, задавайте вопросы. Помогу, чем смогу. По материалам "Радиоежегодник-1989" текст в редакторе "WINWORD" набрал Александр SAM. ------------------------------------------
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября