80C517A Paging

OP (Firma: Technische Universität Berlin) #2647564
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
Gast #2647577
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.
Gast #2647597
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?
OP (Firma: Technische Universität Berlin) #2647615
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.
Gast #2647641
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.
#2647691
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
OP (Firma: Technische Universität Berlin) #2647707
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
#2647723
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.
Gast #2647725
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.
Gast #2647854
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.
Gast #2647872
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren