Forum: Mikrocontroller und Digitale Elektronik 80C517A Paging


von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Hallo Leute,

ich beschäftige mich gerade mit einem Assemlber-Code für einen 80C517A, 
den wir bekommen haben um ihn zu analysieren. Wir sollen dabei wohl den 
Mikrocontroller verstehen.

Soweit stellt das alles auch keine Herausforderung dar, nur gibt es ganz 
am Anfang ein Setup, das ich partout nicht verstehe.
1
MOV 0xB2, #0x0  ; PORT_PAGE = 0
2
MOV 0xB1, #0x81 ; Set Port3 Pin0 and P7 as Output
3
MOV 0xB0, #0x00 ; Set level of Pin0 and Pin7 to GND
4
ORL 0xB0, #0x01 ; Set Pin0 to HIGH

Ich habe bereits verstanden, dass einige Register in Pages unterteilt 
werden, da sie wohl nicht alle durchadressiert werden können.
Wohl so ähnlich wie das Multiplexing bei den ADC-Channels bei den AVRs.

Leider finde ich die Anleitung von Infineon zu diesem Thema sehr dürftig 
(Ab Seite 3-10).
http://www.infineon.com/dgdlc/en?dcId=8a8181663431cb50013431cb500b0000&download=L2RnZGwvWEM4OHhDTE1fdW1fdjFfMy5wZGY/Zm9sZGVySWQ9ZGIzYTMwNDQxMmI0MDc5NTAxMTJiNDA4ZThjOTAwMDQmZmlsZUlkPWRiM2EzMDQ0MTJiNDA3OTUwMTEyYjQwYzUzZGEwYjBiJnNJZD1kYjNhMzA0MzM2Y2EwNGM5MDEzNmQ5ZDg5ZGU1NWE2ZQ==
(Habe mal den Link reingepackt, weil es schon sehr groß ist.)

Darin ist Paging zwar grob erklärt, lässt aber noch enorm viel Fragen 
offen.

So sind die Register MOD_Page und SCU_Page erklärt aber nicht PORT_PAGE 
(0xB2), was sehr praktisch wäre, auch wenn es scheinbar den gleichen 
Aufbau.
Dies ist ein 8-Bit-Register. Wieso werden in der ersten Zeile nur 4 Bit 
übergeben?

Die Storages (ST) und die dazu gehörigen Operation-Modi dienen wohl im 
Falle von Interrupts zum zwischenspeichern der Pages. Was die Sache 
unheimlich kompliziert macht, will man nur die Page wechseln und warum 
werden diese nicht mit angegeben? Werden diese Bits (also OP und STNR) 
automatisch auf 0 gesetzt?
P3_DIR (0xB1 in dieser Page) ist wohl sowas wie DDRD bei einem ATtiny 
oder Atmega. Ich nehme mal an, eine '1' steht für Ausgang, eine '0' für 
Eingang. (Ist in diesem Kapitel auch nicht erklärt.) P3_DATA (0xB0) ist 
dann wohl sowas wie PORTD. Es setzt also die zwei Pins auf Ground. 
Welche Auswirkung hat es denn aber auf die anderen Pins? Werden wie bei 
den ATmega/ATtiny dann Pull-Ups gesetzt?

Ich hoffe, Ihr könnt mir helfen, bei dieser kruden Architektur den 
Durchblick zu bekommen. ^^

Vielen Dank
Fabian

von Wilhelm F. (Gast)


Lesenswert?

Oh mann, Fabian, das ist alles sehr schräg, was du beschreibst. Es hat 
wohl mit einen Tool zu tun.

Denn ich verwende den 80C517A auch seit langem, mit dem SDCC-Compiler.

Aber vielleicht können wir hier was erörtern.

Datenblatt und User Manual von Infineon beinhalten aber alles, ich 
vermisse nichts. Wenn man mit Englisch nicht auf Kriegsfuß steht.

Leider befindet sich im Link keine Information, was man da lädt. Nur 
Download oder Cancel.

von Wilhelm F. (Gast)


Lesenswert?

Fabian Hoemcke schrieb:

> MOV 0xB2, #0x0  ; PORT_PAGE = 0
> MOV 0xB1, #0x81 ; Set Port3 Pin0 and P7 as Output
> MOV 0xB0, #0x00 ; Set level of Pin0 and Pin7 to GND
> ORL 0xB0, #0x01 ; Set Pin0 to HIGH

B0 ist der Port 3. Hier wird in den letzten zwei Befehlen der Pin 0 des 
Port 3 auf High gesetzt.

B1 ist Register SYSCON. Der Kommentar daran ist falsch.

Register B2 gibt es bei mir gar nicht. Es würde sonst in meinem 
Header-File mit den Registerdeklarationen drin stehen. B2 ist aber die 
Bitadresse für Portpin P3.2. Der Befehl sollte wohl ein Bitbefehl sein, 
der den Pin P3.2 auf Low setzt. Dann brauchte man aber 2 Befehle, da 
Bitverschiebungsbefehle nur über das Carry-Flag laufen.

An dieser Befehlssequenz aus den 4 Befehlen ist was faul.

Hmm, SYSCON, kann es sein, daß mit dem Paging das integrierte externe 
RAM auf dem Chip gemeint ist?

Immerhin habe ich noch ein deutsches Handbuch von Siemens. Dort ist zum 
Paging des externen RAM beschrieben, daß es nur einmal einschaltbar ist, 
und nicht wieder abschaltbar. Ist es also was zum integrierten XRAM mit 
2kB Größe, was du wissen möchtest?

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Angehängte Dateien:

Lesenswert?

Ja, dort kann man es runter laden, wenn man den Lizenzbestimmungen 
zustimmt.
Aber gut, ich lade es mal hoch!

Wir verwenden zwar Davebench. Leider!
Dürfte aber keinen Einfluss auf die Architektur haben. xD

Danke
Fabian

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Super. Ich habe mich wohl gerade mächtig blamiert.
In der Kursbeschreibung steht, dass der 80C517A verwendet wird. Nun sehe 
ich, dass wir XC886/888CLM verwenden.

In wiefern der anders ist, weiß ich leider nicht.
Ich kenne mich mit der Familie gar nicht aus.

Alle Befehle beziehen sich also auf den XC886.

von STK500-Besitzer (Gast)


Lesenswert?

Fabian Hoemcke schrieb:
> In wiefern der anders ist, weiß ich leider nicht.
> Ich kenne mich mit der Familie gar nicht aus.

Kann man aber lernen...

von Wilhelm F. (Gast)


Lesenswert?

Fabian Hoemcke schrieb:

> Super. Ich habe mich wohl gerade mächtig blamiert.

Quatsch.

> In der Kursbeschreibung steht, dass der 80C517A verwendet wird. Nun sehe
> ich, dass wir XC886/888CLM verwenden.

Schade. Ich hätte wenigstens bei allem um den 80C517A herum helfen 
können.

Den XC886 kenne ich leider gar nicht.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Laut Wikipedia gehört die XC800 Familie von Infiniion zu den 8051 
kompatiblen.

Ich nehme mal an, dass sich da "Infinion" sich da sehr an "Siemens" 
orientiert hat.

Wenn es aber ein 80C517A wäre, was würdest Du dann zu meinem Problem 
sagen?

von Oliver J. (skriptkiddy)


Lesenswert?

Fabian Hoemcke schrieb:
> Dies ist ein 8-Bit-Register. Wieso werden in der ersten Zeile nur 4 Bit
> übergeben?
Trugschluss. Es werden 8 Bit übergeben.


> Werden wie bei
> den ATmega/ATtiny dann Pull-Ups gesetzt?
Nein. Dafür gibt es die
Px_PUDSEL
Px_PUDEN
Register. (x = 0 .. 5)


> Werden diese Bits (also OP und STNR)
> automatisch auf 0 gesetzt?
Nicht automatisch, sondern manuell. Nämlich mit "MOV 0xB2, #0x0". (Denn 
#0x0 == #0x00)


PS. Man kann in digitalen Datenblättern und Manuals eine Wort-Suche 
verwenden.


Gruß Oliver

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Oliver J. schrieb:
> Fabian Hoemcke schrieb:
>> Dies ist ein 8-Bit-Register. Wieso werden in der ersten Zeile nur 4 Bit
>> übergeben?
> Trugschluss. Es werden 8 Bit übergeben.
Danke
>
>
>> Werden wie bei
>> den ATmega/ATtiny dann Pull-Ups gesetzt?
> Nein. Dafür gibt es die
> Px_PUDSEL
> Px_PUDEN
> Register. (x = 0 .. 5)
Was passiert statt dessen? Werden die Bits verworfen?
>
>
>> Werden diese Bits (also OP und STNR)
>> automatisch auf 0 gesetzt?
> Nicht automatisch, sondern manuell. Nämlich mit "MOV 0xB2, #0x0". (Denn
> #0x0 == #0x00)
Danke.
>
>
> PS. Man kann in digitalen Datenblättern und Manuals eine Wort-Suche
> verwenden.
Und nach welchem Wort hätte ich suchen sollen?
>
>
> Gruß Oliver

von Oliver J. (skriptkiddy)


Lesenswert?

Fabian Hoemcke schrieb:
> Wenn es aber ein 80C517A wäre, was würdest Du dann zu meinem Problem
> sagen?
Ich Antworte mal:
Der 80C517A nutzt kein Paging. Da passen alle SFR in den dafür 
vorgesehenen Adressraum. Die IO-Ports haben außerdem eine völlig andere 
Architektur.


Gruß Oliver

von Oliver J. (skriptkiddy)


Lesenswert?

Fabian Hoemcke schrieb:
> Was passiert statt dessen? Werden die Bits verworfen?
Die werden nicht verworfen, aber von der Port-Logik ignoriert, da die 
entspechenden Pins nicht auf Ausgang gesetzt sind.
1
MOV 0xB0, #0x00
Setzt nämlich alle 8 Bits im P3_DATA zu 0.

>> PS. Man kann in digitalen Datenblättern und Manuals eine Wort-Suche
>> verwenden.
> Und nach welchem Wort hätte ich suchen sollen?
Pull-up vielleicht? Da hättest du die beiden von mir genannten 
Register gefunden.

von Wilhelm F. (Gast)


Lesenswert?

Oliver J. schrieb:

> Der 80C517A nutzt kein Paging.

Leider doch. Und zwar im XRAM-Adressbereich.

Der 80C515 hatte sowas auch. Das sind aber Sonderfälle, die nur diese 
beiden Controller betreffen. Woanders trifft man noch viel mehr, z.B. 
bei SiLabs-Derivaten des 8051, der so viele SFR hat, daß sie nicht in 
die 128 Byte übliche SFR passen. Da machte man 5 Pages nur mit SFR. Ein 
Byte der SFR benutzt man zur Pageumschaltung für Zugriffe auf die 
SFR-Register. Wobei er sonst immer noch zum Standard-8051 kompatibel 
ist.



Fabian Hoemcke schrieb:

> Wenn es aber ein 80C517A wäre, was würdest Du dann zu meinem Problem
> sagen?

Leider habe ich überhaupt keine Ahnung vom XC886. Es scheint aber auch 
eine alte Kiste zu sein.

von Oliver J. (skriptkiddy)


Lesenswert?

Wilhelm Ferkes schrieb:
> Leider doch. Und zwar im XRAM-Adressbereich.
Aber kein Paging für die SFR. Das war eigentlich das was ich sagen 
wollte.

Auszug aus dem Manual:
1
The special function register area is located in the address space 
2
above the internal RAM from addresses 80H to FFH. All 81 special 
3
function registers of the SAB 80C517 reside here.


Gruß Oliver

von 8 Bit forever (Gast)


Lesenswert?

Wilhelm Ferkes schrieb:
> Es scheint aber auch eine alte Kiste zu sein.

Nein, die Dinger sind die 8 Bit Renaissance bei Infineon.

Fabian Hoemcke schrieb:
> Laut Wikipedia gehört die XC800 Familie von Infiniion zu den 8051
> kompatiblen.
>
> Ich nehme mal an, dass sich da "Infinion" sich da sehr an "Siemens"
> orientiert hat.

Der Ursprung der 8051 Familie liegt bein Intel.

von Wilhelm F. (Gast)


Lesenswert?

8 Bit forever schrieb:

> Wilhelm Ferkes schrieb:
>> Es scheint aber auch eine alte Kiste zu sein.
>
> Nein, die Dinger sind die 8 Bit Renaissance bei Infineon.

Interessant. Dabei hätte ich eher geglaubt, daß andere Hersteller wie 
SiLabs da ganz moderne Kisten herstellen. Hatte sowas schon mal auf dem 
Tisch.

> Fabian Hoemcke schrieb:
>> Laut Wikipedia gehört die XC800 Familie von Infiniion zu den 8051
>> kompatiblen.
>>
>> Ich nehme mal an, dass sich da "Infinion" sich da sehr an "Siemens"
>> orientiert hat.
>
> Der Ursprung der 8051 Familie liegt bein Intel.

Das weiß ich. Und zwar begann ich mit Bastelprojekten wirklich mit dem 
Ur-8031, noch im 40-poligen DIL-Gehäuse, und NMOS. Sogar, bevor ich 
einen PC hatte. Den EPROMMER handgebaut, zur Eingabe einzelner Bytes, 
die ich vorher auf einem Blatt Papier berechnete.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

8 Bit forever schrieb:
> Der Ursprung der 8051 Familie liegt bein Intel.

Das ist mir klar. Dachte nur, da der 80C517 von Siemens ist, wird der 
XC886 von Infinion nicht viel anders sein.
Weit gefehlt wie mir scheint.

von Oliver J. (skriptkiddy)


Lesenswert?

Fabian Hoemcke schrieb:
> Weit gefehlt wie mir scheint.
Oh ja.

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.