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 M8VUON28-,.K4E MT:=309)>_1YD^/*E65%_E&W=M2=!LP0INC3X*BHC^D2ILP0[Z,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"%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(DXM(N_(GR4E*V.0D`L;1LRX'*_GA0)_]47,.4,(U/ER- M"@.R/)ZLCY!HTJ,Q31-7Q`V`
от: 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]




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

Похожие статьи:
Ассемблер - Turbo Loader с полным контролем ошибок.
Coding - 16-битная процедура быстрого возведения в степень.
Enjoy - Юмор.
Железо - Цветовая маркировка радиоэлементов.
Софт - Как сменить шрифт в ACE.

В этот день...   7 мая