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
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.
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?
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
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.
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.
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?
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
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
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
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.
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.
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
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.
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.
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.