Hallo! Ich habe mir einen LPC2106 besorgt und habe Crossworks als IDE. Habe keine Ahnung mit welche Befehle ich Pins auf 1 und wieder auf 0 setze oder wie ich sonstige Funktionen des ARMs programmiere. Das Problem ist ja, dass es so viele verschiedene Header-Files gibt. Kann mir jemand helfen oder ist in diesem Forum schon so ein Beitrag. Tut mir leid, dass ich mit so einfachen Sachen störe, aber jeder muss mal anfangen. Mfg Kroko
Hm, prinzipiell mußt Du erstmal gar kein Header File verwenden um einen Port zu togglen. Es gibt lt. Usermanual S. 81 für die GPIO 4 Register mit denen Du Arbeiten kannst. Ablaufen tut das nach folgenden Schema: - Solls n Ausgang oder n Eingang sein ? Register: IODIR - Für den Ausgang kannst Du dann mit Register IOCLR und IOSET den Port Pin setzen oder net. Das Headerfile dient nur um dir das Leben einfacher zu Machen. Das Register IODIR liegt an Addresse: 0xE0028008 Du darfst natürlich mit (*((DWORD *)0xE0028008)) = 0x12345678; auf das Register zugreifen - Im Allgemeinen schauts mit IODIR = 0x12345678; besser aus. Was das Ding sonst noch kann steht im Datenblatt bzw. Usermanual drin. Ohne das gibts kein weiterkommen. cu
@ ... cu: Selbstverständlich braucht man ein Headerfile für die Registerdefinitionen, und zwar hier das LPC210x.h. @Kroko: Ansonsten sind das User Manual und das Data Sheet stets sehr nützlich: Philips LPC2106-Seite: http://www.semiconductors.philips.com/pip/LPC2106.html User Manual: http://www.semiconductors.philips.com/acrobat/usermanuals/UM_LPC2106_2105_2104_1.pdf Data Sheet: http://www.semiconductors.philips.com/acrobat/datasheet/LPC2104_2105_2106-05.pdf Und wenn mal was nicht wie erwartet geht: Errata Sheet: http://www.semiconductors.philips.com/acrobat/erratasheets/2106.pdf Bei Keil findet man ein paar schöne Beispielprogramme für die Philips LPC2000 Serien: http://www.keil.com/download/list/arm.htm Da ist auch was mit Pin-Ansteuerung dabei (Blinky, Blinky-IRQ, Konfiguration der I/O. In denen sieht man auch gut, wo welche Headerfiles eingebunden sind. Eventuell muß die Software an den LPC-Typ (Auswahl Headerfile mit Registerdefinitionen) und die Konfiguration an die andere IDE (Crossworks anstatt Keil µVision3) angepaßt werden. Gruß Dietmar
>Selbstverständlich braucht man ein Headerfile für die >Registerdefinitionen, und zwar hier das LPC210x.h. So ein Schmarrn. Niemand zwingt einen, ein Headerfile zu verwenden. *((unsigned int *) 0x12345678) = 12345; funktioniert doch genauso. Im Header steht zwar nichts anderes drin, aber gerade am Anfang kann es schonmal nützlich sein, das alles selbst zu machen, um es besser zu verstehen.
Dann machen Philips und Keil also umsonst Headerfiles mit hardwareabhängigen Registerdefinitionen :-( Gruß Dietmar
Nicht umsonst, aber kostenlos. Nur BRAUCHT man eben keinen Header, nicht zwingend. Und da Kroko wohl grundsätzliche Probleme hat, kann man das zu Lernzwecken auch mal weglassen.
@Karl: Man muß sich das Leben aber auch nicht unnötig erschweren: Bindet man das Definitions-H-File ein, kann man die Peripherals unter dem Namen exakt wie im Datenblatt ansprechen. Das ist doch besser als: *((unsigned int *) 0x12345678) = 12345; Oder??? Sowas macht nur den Code unleserlich. Wie Kroko, so habe ich vor gut 2 Jahren auch mit C angefangen, unmittelbar danach kam der ARM-Controller. Um die Register-Definitionen, habe ich mich nie gekümmert, sondern sie sofort eingebunden. Wem das zu schwer ist, für den ist aber auch der ARM-Controller eine Nummer zu hoch, oder? Haben wir heute Vollmond, oder was? Und gegen Polen haben wir doch auch gewonnen. Gruß Dietmar
Die Argumentation von Karl ist schon nachvollziehbar. Wenn man sowas noch nie "von Hand" gemacht hat, ist man eine Abstraktionsebene weiter von der Hardware entfernt, und so auch eine Ebene weiter davon, zu verstehen, was da eigentlich vor sich geht. Daß das ein echtes Problem sein kann, sieht man in Anbetracht mancher Anfängerfragen. Es ist auch durchaus sinnvoll und lehrreich, das Compilat solcher einfach(st)en Programme auf Assemblerebene anzusehen, um nachzuvollziehen, was der Compiler da anstellt. Das setzt eine gewisse Grundkenntnis in Assembler voraus, aber die sind bei der Beschäftigung mit Microcontrollern sowieso ratsam. Zugegeben, ARM-Assembler ist schon ziemlich ... heftig, damit sollte man vielleicht nicht gerade anfangen. Natürlich ist es sinnvoll, im täglichen Einsatz alle Hilfsmittel zu verwenden, die einem das Leben einfacher machen, aber es ist eben auch sehr wichtig, zu verstehen, was das Hilfsmittel macht, das einem das Leben einfacher macht. Ganz plumpes Beispiel: Erst wer mit Hammer und Meißel einen Schlitz in die Wand gestemmt hat, weiß die Errungenschaft der Schlitzfräse richtig zu schätzen :) Und nur mit diesem Wissen hat man dann auch die Chance, sich mal eben so eine Headerdatei an einen neuen bislang nicht vom Compilerhersteller mit einer Headerdatei gewürdigten Controller zu erstellen.
@Rufus T. Firefly: Schwülstige Wortlaute, ohne Ende: Mit einem ARM7 aus dem Nichts anzufangen, ist mir ehrlich gesagt sehr suspekt. Ein 8080, und mit Assembler anfangen, wäre da eher geeignet. Gruß Dietmar
ist es nicht egal mit welchem Prozessor man anfängt. Am Ende ist es doch immer nur Bit-Geschupse in den Registern, ob nun 8051, AVR, ARM, PIC, ... Das einzige was bei den Prozessoren unterschiedlich schwer ist, ist die Beschaltung, aber die scheint er ja schon fertig zu haben, denn sonst würde er ja nicht schon programmieren wollen, oder? Also ich kann mich den konstruktiven Beiträgen nur anschließen und Dir empfehlen mal wenigstens ein Programm entweder in ASM zu schreiben oder halt in C ohne Header-File. Danach kannst es Dir ja einfacher machen und die Header-Files einbinden. Gruss Sebastian
Danke für die vielen Antworten! Mein Entwicklungs-Board ist schon länger fertig. Werde das, wasw ihr mir geraten habt, mal ausprobiern. Mfg Kroko
@Kroko: Dann kopier dir wenigstens ein paar #defines aus dem Register-Headerfile in das Main-C-File. Und wenn es nur die sind, die die I/O-Ports betreffen. Ein Bit mit: IOSET1 = (0x01 << 7); zu setzen, ist doch eleganter und übersichtlicher als *((unsigned int *) 0x12345678) = 12345; Oder? Gruß :-) Dietmar
@Kroko: Um welches Demoboard handelt es sich? @Sebastian: Ein ARM7 wie die LPC2000 ist schon ein anderes Kaliber als ein 8051. Irgendwann muß man sich da auch mal mit solchen Dingen wie der Startup.s (Stack-Initialisierung für alle Betriebsmodi, usw.) beschäftigen, den Betriebsmodi, dem Interrupt-Controller, und eventuell auch mit Pipelining-Effekten und einigen anderen Feinheiten, die ein 8051 so nicht hat. Natürlich, so ein modernes ARM Demoboard kann man am Schreibtisch betreiben und braucht (zunächst) keine Laborausstattung, das ist schon eine feine Sache. Ich hatte ja ursprünglich auch gemeint, einzig und alleine nur das Register-H-File einzubinden, und weiter nichts. Das haben sogar die einfachen Beispiele wie "Hello World". Gruß Dietmar
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.