Forum: Mikrocontroller und Digitale Elektronik Z180 schaltet seine Taktfrequenz nicht um


von Micha (Gast)


Lesenswert?

ich experimentiere mit einem Zilog Z180, genau gesagt einem Z8S180. Bei 
den ersten einfachen Experimenten hat das Abschalten des Refresh Signals 
funktioniert, aber die Umschaltung des Systemtakts funktioniert nicht, 
wenn ich die entsprechenden Systemregister manipuliere, siehe Code. Bei 
einem externen Quartz mit 3,68 MHz kommen am PHI pin immer 1,84 MHz 
raus. Was ist falsch an diesem minimalen Stück code?
1
; Z180 erste Tests
2
3
cmr  .equ  1Eh  ; clock multiplier register
4
ccr  .equ  1Fh  ; CPU control register
5
rcr  .equ  36h  ; refresh control register
6
icr  .equ  3Fh  ; I/O control register, base addr. for internal I/O
7
8
  .org   0000h
9
10
begin:  
11
; das funktioniert:
12
  ld  a,0  ; clear a
13
  out  (icr),a  ; set internal I/O to base addr. 0
14
  out   (rcr),a  ; switch off DRAM refresh facility
15
; das funktioniert nicht:
16
  ld  a,80h
17
  out  (ccr),a  ; switch from 1/2 clock to full speed
18
  out  (cmr),a  ; 2 x external clock
19
20
loop:  jr  loop
21
  .end

von (prx) A. K. (prx)


Lesenswert?

Micha schrieb:
> einem externen Quartz mit 3,68 MHz kommen am PHI pin immer 1,84 MHz
> raus.

"The frequency of this output is equal to one-half that of the crystal 
or input clock frequency."

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Es gibt vom Z8S180 2 Versionen. Die Version SL1960 enthält die 
Erweiterungen des Z8S180 nicht.
http://www.zilog.com/manage_directlink.php?filepath=docs/z180/appnotes/TN0053&extn=.pdf

: Bearbeitet durch User
von Leo C. (rapid)


Lesenswert?

Die internen Register werden über 16-Bit-Addressen (0x0000-0x00ff) 
adressiert. Deshalb müssen die out0/in0 Befehle verwendet werden, da bei 
den "herkömmlichen" in/out-Befehlen Register A auf der oberen 
Adressbushälfte liegt.

Micha schrieb:
> ; das funktioniert:
>   ld  a,0  ; clear a
>   out  (icr),a  ; set internal I/O to base addr. 0
>   out   (rcr),a  ; switch off DRAM refresh facility

A == 0, deshalb gehts hier.

> ; das funktioniert nicht:
>   ld  a,80h
>   out  (ccr),a  ; switch from 1/2 clock to full speed
>   out  (cmr),a  ; 2 x external clock

A != 0, Interne Register werden nicht selektiert.

von Micha (Gast)


Lesenswert?

Vielen Dank!

Hab das gerade mit den out0 Instruktionen probiert - klappt :-)

von Holm T. (Gast)


Lesenswert?

Komisch das Du damit bei Robotrons nicht auftauchst :-)

Gruß,

Holm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.