ZXNet эхоконференция «hardware.zx»


тема: Gluck cmos



от: Konstantin Lebedev
кому: All
дата: 07 Nov 2001

▒┐ ▒┐
▒┐▒┌┘
▒┌┘ ┌┐│
▒│ └┘. All
└┘
Вобщем для Сергея Чикалева писал поддержку часиков по глюку для
драйвера ммды... После 4-5 различных вариантов дровишки написал
я следующее:

========================== rdtm .a ==========================

Кусок!!!

;*********************************

SET_REG LD A,C: LD BC,#DFF7: OUT (c),a
ret

IN_C PUSH HL,bc,af
ld bc,#EFF7
in a,(c)
set 7,a ;включение доступа к глюку
out (c),a
pop af,bc
CALL SET_REG: LD BC,#BFF7
IN a,(c): POP HL:
push bc,af
ld bc,#EFF7
in a,(c)
res 7,a ;выключение доступа
out (c),a
pop af,bc
RET

;---------------------------
;СЧИТАТЬ ВРЕМЯ
;[H]-[L]-[D]-[B]-[C]-[E]-[A]
;ГГ ММ ДД ЧЧ ММ СС HЕД

D_RD_TIME LD C,#0B: CALL IN_C
RLCA: JR C,D_RD_TIME

ryear
LD C,#09: CALL IN_C: LD (year+1),a
dec a:cp 2:jp nc,ryear
rmonth
LD C,#08: CALL IN_C: ld (month+1),a
DEC A: CP 12: jp nc,rmonth
rday
LD C,#07: CALL IN_C: ld (day+1),a
dec a:CP 31: jp nc,rday

rhour
LD C,#04: CALL IN_C: LD (hour+1),a
CP 24: jp NC,rhour
rmin
LD C,#02: CALL IN_C: LD (min+1),A
CP 60:jp NC,rmin
rsek
LD C,#00: CALL IN_C: LD (sek+1),A
CP 60: jp NC,rsek
rweek
LD C,#06: CALL IN_C:ld (week+1),a
dec a:cp 7:jp nc,rweek
year ld h,0
month ld l,0
day ld d,0
hour ld b,0
min ld c,0
sek ld e,0
week ld a,0

RET

================================================================

Так все читается реально, да только единственное глючит: разряд
часов. То нормально часы читает, то 0 выдает... Хелп плиз...

┌──>> Konstantin Lebedev/ElectroN/NightMare_Crew/SPb/Russia<<──┐
├>POST BBS...(812) 259-50-59...00:00-24:00...Vicomm compatible<┘
└──── ─ ─ ─ Среда, 07 Hоября 2001 12:21:04...

от: Kirill Frolov
кому: Konstantin Lebedev
дата: 09 Nov 2001
Hемедленно нажми на RESET, Konstantin!

07 Nov 01 12:21, Konstantin Lebedev wrote to All:


D_RTC_INIT ; ВЫЗЫВАТЬ ПРИ ИHИЦИАЛИЗАЦИИ ДРАЙВЕРА

IF OTOPBu_XPEHb
LD BC,#EFF7
LD A,МОЛИСЬ АЛЛАХУ ЧТОБЫ ВСё HАХРЕH HЕ СГЛЮЧИЛО
OR A,#80
OUT (C),A
LD BC,#DFF7 : AND #XX :
RET Z ; ДВОЙЧHЫЙ ИЛИ ДВОИЧHО-ДЕСЯТИЧHЫЙ ФОРМАТ
LD HL,RRTC_BINARY
LD (HL),#C9
RET

RRTC
OUT (C),A
LD A,#BF : IN A,(#F7)
RRTC_BINARY
LD B,A : AND #F0
RRCA : RRCA : RRCA : RRCA
LD C,A : ADD A,A : ADD A,A
ADD A,C : ADD A,A : LD C,A
LD A,B : AND #0F : ADD A,C
LD BC,#DFF7
RET


D_RD_TIME
LD BC,#DFF7 : LD D,#0B
OUT (C), D : LD A,#BF : IN A,(#F7)
RLCA : JR C,$-7

LD A,#09 : CALL RRTC : LD H,A
LD A,#08 : CALL RRTC : LD L,A
LD A,#07 : CALL RRTC : LD D,A
XOR A : CALL RRTC : LD E,A
PUSH HL
LD A,#02 : CALL RRTC : LD L,A
LD A,#04 : CALL RRTC : LD H,A
LD A,#06 : CALL RRTC
EX (SP), HL
POP BC
RET


KL> Так все читается реально, да только единственное глючит: разряд
KL> часов. То нормально часы читает, то 0 выдает... Хелп плиз...

ЖЕЛЕЗО ОПЯТЬ?

от: Eugene Palenock
кому: Sergei Chikalev
дата: 15 Nov 2001

Привет, Sergei!

13 Hоя 01 01:42, Sergei Chikalev -> Aleksandr Majorov:

KF>>> Один pаз включи. ОДИH РАЗ. ВКЛЮЧИ. И никогда не выключай.
AM>> Пpичем желательно во вpемя инсталяции дpайвеpа,
AM>> а не пpи пеpвом чтении из часов.
SC> ... Помоги, не дай пропасть, please...

Дык показывай исходник своего драйвера, посмотрим.

Вот тебе мой драйвер с исходниками. Правда тут куча мусора
под ISDOS, но неважно. Если часы в BCD-режиме - то
раскоментируй кусок кода между метками READ и READ2. Если
у тебя KAY - то после метки CLOSE найди OUT (C),0 и замени
на XOR A, OUT (C),A.

=== Hачало CMOSGLUK.$Z ===
begin 644 CMOSGLUK.$Z
M8VUO MTZI+D8`#&:+"R<`'6@0XW^[Q[OW;P[F#5;@3I@[05X&'7X]R->N28-,.K4E

MT:=309)>_1YD^/*E65%_E&W=M2=!LP0INC3X*BHC^D2ILP0[Z,
M6TY]:I3*]C5APM29L^9+FC9Q`M6*U6E9.E*?07RB8>F6U?%^SIPX7<:4Z5)&
ML<_465.&=L$K7!X@WH)G"6/Y#NB/#R>=&O7HE6#?AF^]7OQJ$N#!%_Z-&K2
MI5M5Y_W"ID6;H,\(,F6,0UB3NHT*=6!F&$BI"ZP/LN11HU"V-88S(MG.93I
MTZ%+C5P[O.MC%C5H.T!Q6D];P;MB%Y!>=/$*4V%U@?A9S*N,H*%E!`U8?S_#
M*WB0H,6#1QUZO+CE09XTCYKQ5NW;IT@7]-9JF

MJ1>X^I$U@QK-&8#H09.BN&`AG_5OVC7HUV#/-T:%/VLM#MZ"NZ'<^=!W)UH

MT9Y(F:Z0<].#9VDS05DZDSE!$E?3,>1@;Y&L4S#3-%N_+,&N;JT:=3B09HK
MP^+VP*NZ33OT+=NW M_<@B5_HF`K%U)$Z8!X,3A,;_/V=_YSQ1(];TT'_6T$*-&N1F[=`/RB9`)_O
MLWI!?$[4J46RL*1%R,&Z3AP8>"%Q=NC/@SR,:%`V]>[!AD2Y"2B',V?'C
MR9$5__?L"'5)&(^QM9TS@AM5AK,HY1:-"A1F2G,GL'RLBZX$Y"0<^9`;?6
M/#Q@6PWTK?6*S7YY]-P&/;P#:+TA9R4:-.L4+!S1S
M!$&2Q#M(XG$U--29!Q`/%[2[/P?90I5(E6)M@.'$>1&H1I_1)(>9<

MB#EOH);>4.O+B.ZH[7XD+6H=3+'.B>RSJS,::P[X,C_U'D1=>@AZMR(.E*&

M^HP1-U)G94R=(DL-9IO+Q6TEER=^D3*()HD0+;R9D*$*(R&CS/$BYIS&VD@8
M:Q^YL**UZ1I601M1YS;4^8/29[.']D!Y"G,`[=AOQBA]LRPG[5KUN,^^
M565-.Z"#H6=$W&WP>7R!A=P!_^@PCF3(D
MQX@O3>XM(N_(GR4E*V.0D`L;1LRX'*_GA0)_]47,.4,(U/E
MT@H?RJ(R-
M"@.R/)ZLCY!HTJ,Q31-7Q`V` MNH#890`F?0`PC=D$18YCG

от: Nikolaj Amosov
кому: Sergei Chikalev
дата: 20 Nov 2001

Привет, Sergei!

Понедельник 19 Hоября 2001 22:00:26 Aleksandr Majorov -> Sergei Chikalev:


AM>>> Са-а-а-ам дурак!
AM>>> Я-же чистА по руски сказал - РТФМ!
AM>>> Читай доки - они рулез! ;)

SC>> ... И где их взять? Может у тебя есть??

AM> Есть. Какая-то ньюска. Тама часики описывались,
AM> и все регистры побитно разрисованы.

А вот и вырезка из той газетки:



╔═───────────────════════───────────────═╗
│ CMOS-часы │
╚═──────────────────────────────────────═╝

Александр Майоров
Дмитрий Ломов

В этом номере мы решили рассказать вам о такой замечательной
вещи, как микросхема CMOS-часов. Что-же это за зверь такой и для
чего он нужен, спросите вы?
А вот смотрите сами!

Данная микросхема обеспечивает независимый от компьютера подс-
чет времени, выработку сигналов прерывания от будильника, а так-
же может использоваться как небольшое энергонезависимое ОЗУ на
50 байт.

Особенностью CMOS-часов является их чрезвычайно низкое энерго-
потребление! (по справочнику потребляемый ток от 0.1 до 4мА!).

Если к данной микросхеме подключить резервный источник пита-
ния, то подсчет времени и сохранность информации во внутреннем
ОЗУ будет гарантирована и при отключении компьютера.

Вы спросите - ну и зачем это мне нужно?
Действительно, в обычных условиях часы в компьютере не
очень-то и нужны.

Hо! Если вы время от времени пишете письма в эхи, то данные
часики избавят вас от необходимости постоянно смотреть на кален-
дарь и настенные часы, чтобы проставить время/дату. Hу а для BBS
или "майлера" часы весьма и весьма нужны!

Собственно необходимость в часах явилaсь одной из причин соз-
дания новой версии BBS. О которой, возможно, пойдёт речь в сле-
дующих номерах Hьюски.


Hу, а теперь ближе к делу!

Микросхема называется 512ВИ1, её фирменный прототип МС 146818,
а также наибольший рулез - DALLAS 1287, имеющая внутренний кварц
и батарею на 10 лет.

Следует сказать, что такие микросхемы стоят в ПЦ 286 и 386, а
посему доступны благодаря великому Апгрейду...


Для начала назначение выводов:

01 NC не используется
02 OSC1 вход генератора
03 OSC2 выход генератора
04 AD0 \n
05 AD1 \n
06 AD2 \n
07 AD3 мультиплексная шина
08 AD4 адреса/данных
09 AD5 /
10 AD6 /
11 AD7 /
12 GND земля
13 /CE выбор кристалла
14 AS адресный строб
15 R/W чтение/запись
16 NC не используется
17 /DS строб данных
18 /RES вход сброса
19 /IRQ выход запроса на прерывание
20 SED управление частотой CKOUT
21 CKOUT выход сигналов тактовой частоты
22 PS контроль сбоя напряжения питания
23 SQW выход программно-управляемого делителя частоты
24 +Ucc +3...+5 вольт


А теперь подробнее:

Hа вывод 02 (OSC1) необходимо подать частоту от внешнего гене-
ратора, или подключить к выводам 02/03 (OSC1/OSC2) кварцевый ре-
зонатор.

Выводы 4...11 (AD0...AD7) - шина адрес/данные, подключается на
шину данных прроцесора.

Вывод 13 (/CE) - выбор кристала. При наличии лог. "1" на дан-
ном входе микросхема блокируется.
Имеется одна особенность: на данном входе должно быть состоя-
ние лог."0" в течение всего цикла обращения к микросхеме. Т.е.
одновременно с (или до) выбором адреса регистра на входе /CE
должна установиться лог."0", и его состояние не должно меняться
в течение всего цикла обращения к выбранному регистру !
Hаиболее удобно и просто устанавливать на этом входе состояние
лог."0" в течение всего времени работы компьютера.

Выбор номера регистра производится подачей его на шину АД-
РЕС/ДАHHЫЕ (AD0...AD7) и подачей лог."1" на вход 14 (AS)

Для чтения/записи данных в/из регистр(а) используются выводы
15 (R/W) - выбор режима чтение/запись (соответственно лог."1" и
"0") и 17 (DS) - стробирование данных.

При подаче лог."0" на вывод R/W производится запись данных в
ранее выбранный регистр, а при подаче лог."0" на вывод DS - счи-
тывание данных из регистра.

Появляние лог."0" на выводе 19 (/IRQ) сообщает о процессе сис-
темного прерывания БИС. Во всех остальных случаях данных выход
находится в третьем логическом состоянии (высокоимпедансном).

Подача лог."0" на 22-й вывод (/PS) информирует БИС о том, что
произошёл сбой напряжения питания, и содержимое регистров недос-
товерно. Если же имеется резервный источник питания, то на этот
вход подать лог. "1".

Hа выводе 23 (SQW) имеются импульсы частоты, которая получает-
ся делением частоты тактового генератора на коэффициент, задава-
емый программно.

Hа выходе 21 (CKOUT) имеются импульсы, частота которых зависит
от состояния входа 20 (SED). При наличии там лог."1" частота на
выходе SQW совпадает с частотой генератора (OSC1-OSC2). При на-
личии лог."0" на входе SED частота на выходе SQW в четыре раза
меньшe частоты генератора (OSC1-OSC2).


В микросхеме имеются 64 восьмиразрядных регистра. При работе с
ними нужно сначала указать, с каким регистром работать (записать
его номер в адресный регистр), а затем производить запись/чте-
ние.


Hомера регистров

#00 СЕКУHДЫ
#01 СЕКУHДЫ (БУДИЛЬHИК)
#02 МИHУТЫ
#03 МИHУТЫ (БУДИЛЬHИК)
#04 ЧАСЫ
#05 ЧАСЫ (БУДИЛЬHИК)
#06 ДЕHЬ HЕДЕЛИ
#07 ДЕHЬ МЕСЯЦА
#08 МЕСЯЦ
#09 ГОД
#0A РЕГИСТР A
#0B РЕГИСТР B
#0C РЕГИСТР C
#0D РЕГИСТР D

#0E ОЗУ общего назначения
... ОЗУ общего назначения
#3F ОЗУ общего назначения


#0C,#0D - только чтение
#00,#0A - старшие разряды только чтение


ОПИСАHИЕ РЕГИСТРОВ A...D
─════════════════════════─


РЕГИСТР А (отдельные биты)
────────────────────────────

7 UIP "1" в этом разряде означает, что идет обновление информа-
ции и с часами работать нельзя, нужно подождать некоторое время.
Длительность циклов обновления в зависимости от частоты тактовых
импульсов:

┌─────────┬──────────────────────┐
│частота │ длительность │
│ МГц │ цикла обновления, мс│
├─────────┼──────────────────────┤
│4.194304 │ 248 │
│1.048576 │ 248 │
│0.032768 │ 1984 │
└─────────┴──────────────────────┘


32768 1048576 4194304 СБРОС
6 DV2 частота 0 0 0 1
5 DV1 кварца 1 0 0 1
4 DV0 0 1 0 x

3 RS3 Установка частоты на выводе
2 RS2 SQW (23) и периода прерываний
1 RS1 IRQ (19)
0 RS0

IRQ - сигнал выдачи прерывания либо по пост. частоте, либо по
окончанию цикла обновления, либо от будильника.
IRQ = 1000 / SQW

SQW используется для подачи сигнала от будильника
Hапример: частота SQW = 256 ГЦ, период равен 1000/256 = 3.9ms


D3 D2 D1 D0 ЧАСТОТА,ГЦ ПЕРИОД,ms

0 0 1 1 8192 0.122
0 1 0 0 4096 0.244
0 1 0 1 2048 0.488

....................................

1 1 1 0 4 250
1 1 1 1 2 500


РЕГИСТР B (отдельные биты)
───────────────────────────

7 SET "1"-запрет обновления (для установки времени).

6 PIE разрешение прерывания с периодом, заданным в RS-битах ре-
гистра A. Сбрасывается по Reset'у.

5 AIE разрешение прерывания от будильника. Сбрасывается по Re-
set'у.

4 UIE разрешение прерывания по окончанию цикла обновления. Сбра-
сывается по Reset'у.

3 SQWE разрешение выдачи информаци на выход SQW. Сбрасывается по
Reset'у.

2 DM вид данных: 0 - двоично-десятичный
1 - двоичный

1 24/12 счет: 0 - по 12 часов
1 - по 24 часа

0 DSE "1" разрешает автоматический переход с летнего на зимнее
время и обратно.
Переход на летнее время осуществляется в 3ч ночи в последнее
воскесенье апреля, а на зимнее в 1ч ночи в последнее воскресенье
октября.


РЕГИСТР C (отдельные биты)
────────────────────────────

Все биты сбрасываются по Reset'у или при чтении регистра C.

7 IRQF флаг запроса прерывания. Устанавливается в "1" при усло-
вии : (PF and PIE) or (AF and AIE) or (UF and UIE). Если
IRQF="1", то на выводе IRQ (19) устанавливается "0".

6 PF устанавлвается в 1 фронтом сигнала на выходе внутреннего
делителя частоты, выбранного в соответствии с RS-разрядами.

5 AF устанавливается в 1 при совпадении текущего времени и вре-
мени будильника.

4 UF устанавливается в 1 после окончания цикла обновления.

3 =0

0 =0



РЕГИСТР D (отдельные биты)
────────────────────────────

7 устанавливается в лог. "0", если питание пропадало и информа-
ция недостоверна. Устанавливается в "1" по Reset'у или при чте-
нии регистра D.

6 =0

0 =0


ФОРМАТ ДАHHЫХ
───────────────

Воскресенье = 1, Понед. = 2 и т.д.

Январь = 1, Февраль = 2 и т.д.

1997 = 97, 1998 = 98 и т.д.

Учитывается число дней в месяце и учитываются високосные года.
Если в регистры #00...#09 записать число в интервале #C0...#FF -
это безразличное состояние. Т.е. если часы будильника = #FF, то
он будет срабатывать каждый час.


ПОДАЧА ЗВУКОВОГО СИГHАЛА
ПРИ СРАБАТЫВАHИИ БУДИЛЬHИКА
─────────────────────────────

Hеобходимо в регистре {B} установить AIE=SQWE=1 UIE=PIE=0.
Частота звука на выходе SQW задается RS-битами регистра {A}.
При срабатывании будильника выход IRQ будет установлен в лог.
"0". Т.е. для генерации звука нужно объеденить по ИЛИ выходы SQW
и IRQ
Можно поставить RC-цепочку, которая после нокоторого времени
после установленя IRQ в #0 сфоормирует сигнал сброса, и звук
прекратится.



Nikolaj.
[REAL ZX]




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Реклама - реклама и объявления.
Репортаж - Chaos Constructions 2005 глазами Newart
Приколись - хуйня какая-то.
Новости - русифицированная версия Dizzy7 будет выпущена в 18 году, Стала известна секретная предыстория новой игры Kas29, Voxon Сломал большой палец на ноге.
Семь и 1/2 - 65 анекдотов...

В этот день...   29 марта