hardware:microcontroller_mcu:mc68hc12
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| hardware:microcontroller_mcu:mc68hc12 [2023-03-02 17:33:28] – angelegt manfred | hardware:microcontroller_mcu:mc68hc12 [2024-03-10 13:13:42] (aktuell) – gelöscht manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== MC68HC12 ====== | ||
| - | |||
| - | |||
| - | ===== Card12.DG128A (MC68HC12) ===== | ||
| - | |||
| - | Ich habe mir diesen MC von " | ||
| - | |||
| - | Einstellungen und Software für den // | ||
| - | auf der Karte "// | ||
| - | Wenn man soein Ding das erste mal in Händen hält, stellen sich einige Fragen | ||
| - | die vom beigelegten Dokumentationsmaterial nicht beantwortet werden. | ||
| - | Die Fragen, die sich mir stellten und die ich nach meinem ersten Kontakt mit | ||
| - | dieser Karte nicht unter zur Hilfenahme der beigelegten Dokumentation | ||
| - | beantworten konnte, will ich hiermit dokumentieren (und noch etwas mehr...). | ||
| - | |||
| - | Ich habe den DG128 nicht wegen der größeren Speicherausstattung gewählt, | ||
| - | sondern weil er noch eine zusätzliche IIC-Schnittstelle besitzt. | ||
| - | |||
| - | Die Karte ist im Format 87mm x 54mm und wird ausschließlich mit 5V betrieben! | ||
| - | Zum Programmieren darf KEINE separate 12V-Versorgung am MC anliegen, | ||
| - | denn diese würde den MC zerstören. Auf der Unterseite der Platine | ||
| - | ist (im Normalfall) für diese in der entsprechenden Leiterbahn eine | ||
| - | Unterbrechung eingearbeitet, | ||
| - | |||
| - | Diese Beispiele wurden alle mit FreeBSD durchgeführt. | ||
| - | |||
| - | |||
| - | ==== COM-Port ==== | ||
| - | |||
| - | Verbindungsparameter der //TwinPEEKs RS232-Kommunikationsschnittstelle// | ||
| - | 19200 Bps | ||
| - | 8N1 | ||
| - | kein Hardwarehandshake | ||
| - | kein Softwarehandshake | ||
| - | kein Terminal-Protokoll (ANSI) | ||
| - | |||
| - | Verbindung mit //cu// aufbauen (geht nur als " | ||
| - | # cu -s 19200 -l /dev/cuaa0 | ||
| - | |||
| - | # vi /etc/remote | ||
| - | cuaa0d|cua0d: | ||
| - | |||
| - | Verbindung mit //tip// aufbauen (geht nur als " | ||
| - | # tip cuaa0d | ||
| - | |||
| - | Konfigurationsdatei bearbeiten (als " | ||
| - | # vi ~/ | ||
| - | pu pname9 | ||
| - | pu pname10 | ||
| - | pu pprog9 | ||
| - | pu pprog10 | ||
| - | pu baudrate | ||
| - | pu bits 8 | ||
| - | pu parity | ||
| - | pu stopbits | ||
| - | pu minit | ||
| - | pu updir Card12 | ||
| - | pu downdir | ||
| - | pu backspace | ||
| - | pu rtscts | ||
| - | pu xonxoff | ||
| - | pu fselw Yes | ||
| - | pu askdndir | ||
| - | |||
| - | serielle Verbindung zwischen dem PC und dem MC starten (als " | ||
| - | # minicom /dev/cuaa0 card12 | ||
| - | |||
| - | oder so (als " | ||
| - | # minicom -t ansi /dev/cuaa0 card12 | ||
| - | |||
| - | Bedienung von // | ||
| - | # CTRL-A T: | ||
| - | # " | ||
| - | # " | ||
| - | # | ||
| - | |||
| - | # TwinPEEKs V1.6a for Card12.DG128A | ||
| - | # | ||
| - | # Help: H | ||
| - | |||
| - | Um eine Datei (z.B.: **"// | ||
| - | muss im Monitor ein **" | ||
| - | jetzt ist der MC empfangsbereit. | ||
| - | |||
| - | Jetzt sendet man mit dem Terminalprogramm die gewünschte Datei an das Monitorprogramm im MC. | ||
| - | |||
| - | Damit das funktioniert, | ||
| - | - "Wait for Handshake" | ||
| - | - " | ||
| - | |||
| - | |||
| - | ==== beiliegende Beispiele ==== | ||
| - | |||
| - | Ein Beispielprogramm wird schon fertig mitgeliefert, | ||
| - | leider ist das für den //HC12D60// geschrieben worden und | ||
| - | der hat unter anderem seinen RAM-Bereich auf " | ||
| - | und der HC12DG128 hat seinen frei verwendbaren RAM-Bereich | ||
| - | auf " | ||
| - | umschreiben (blink.s) und neu übersetzen (blink.s19) muss. | ||
| - | Program Memory (ORG): 0x8000 (erste Adr. auf der das Program gspeichert ist) | ||
| - | Data Memory | ||
| - | Sack Pointer | ||
| - | |||
| - | Ein funktionierender Quelcode, bei dem der Stack Pointer von 0x0600 auf 0x4000# geändert wurde könnte wie folgt aussehen. | ||
| - | |||
| - | |||
| - | === Inhalt der Datei " | ||
| - | |||
| - | CPU 68HC12 | ||
| - | PADDING OFF | ||
| - | ORG $8000 | ||
| - | main lds $4000 | ||
| - | clr $0016 | ||
| - | bset $002b,$80 | ||
| - | blink1 | ||
| - | eora #$80 | ||
| - | staa $0029 | ||
| - | bsr delay | ||
| - | bra blink1 | ||
| - | delay psha | ||
| - | pshx | ||
| - | ldx #$1000 | ||
| - | _loop1 | ||
| - | _loop0 | ||
| - | dbne x,_loop1 | ||
| - | pulx | ||
| - | pula | ||
| - | rts | ||
| - | END main | ||
| - | |||
| - | |||
| - | === MEMORY MAP des Motorola MC68HC912DG128A (// | ||
| - | |||
| - | Register block: 0x0000 - 0x03FF | ||
| - | EEPROM | ||
| - | RAM : 0x2000 - 0x3FFF | ||
| - | | ||
| - | | ||
| - | Flash ROM : 0x4000 - 0x7FFF | ||
| - | Flash ROM : 0x8000 - 0xBFFF | ||
| - | Flash ROM : 0xC000 - 0xFFFF | ||
| - | (Bootblock des Monitorprogramms belegt 0xE000 - 0xFFFF) | ||
| - | | ||
| - | |||
| - | |||
| - | ==== Daten in den MC laden ==== | ||
| - | |||
| - | Nach dem übersetzen in das // | ||
| - | |||
| - | Inhalt der Datei " | ||
| - | S0030000FC | ||
| - | S1138000CF40007900164C2B80962988805A290786 | ||
| - | S11380100220F63634CE1000870430FD0435F930E2 | ||
| - | S1058020323DEB | ||
| - | S90380007C | ||
| - | |||
| - | Im einfachsten Fall kann man diese Zeilen folgender maßen in den MC bekommen. | ||
| - | Man tipt im Terminalfenster, | ||
| - | fügt mit der Maus (copy + past / makieren und einfühgen) die Zeilen ein, | ||
| - | eine nach der anderen. Wichtig ist nur, das nach jeder Zeile ein | ||
| - | Zeilenumbruch mit eingegeben wird! Den kann man in X11 mit der Maus | ||
| - | mit übergeben, sonst muss man einmal ENTER drücken bevor man die nächste | ||
| - | Zeile kopieren kann. Nach dem ENTER (Zeilenumbruch) muss unbedingt auf das | ||
| - | Quittungszeichen (ein **" | ||
| - | bevor die nächste Zeile kopiert werden kann. | ||
| - | Aus diesem (Timing-) Grund kann man nicht immer den ganzen Inhalt | ||
| - | der S19-Datei, sozusagen mit einem Maus-Klick in den MC pumpen. | ||
| - | |||
| - | Verwendet man //tip// oder //cu//, schaltet man mit **" | ||
| - | sagt //tip/cu// mit der Zeichenfolge " | ||
| - | eingespielt werden soll. Jetzt wird man aufgefordert den Dateinamen | ||
| - | einzugeben, an dieser Stelle gibt man den Namen der // | ||
| - | und drückt ENTER. Die // | ||
| - | (meistens dem HOME-Verzeichnis) befinden. | ||
| - | |||
| - | Um das Programm dann zu starten genügt die Eingabe //g 8000//, das bedeutet | ||
| - | das Monitorprogramm soll an Adresse //0x8000// springen und das dort liegende | ||
| - | Programm starten. | ||
| - | Soll das Programm gleich nach dem einschalten automatisch gestartet werden, | ||
| - | müssen zwei Pins auf dem Board verbunden werden. | ||
| - | Das sind die Portleitungen //PH6// und //PH7//, auf dem Board sind das | ||
| - | die Pins //7// und //8// des Steckverbinders //ST5//. Zu finden oben links auf dem Board. | ||
| - | Besteht diese Verbindung, so wird nach dem einschalten immer an die Adresse | ||
| - | //0x8000// gesprungen und das Monitorprogramm nicht weiter abgearbeitet! | ||
| - | |||
| - | |||
| - | ==== Programmiersprachen ==== | ||
| - | |||
| - | === Assembler === | ||
| - | |||
| - | Zum Assemblerprogrammieren ist " | ||
| - | * Web : [[http:// | ||
| - | * FreeBSD-Ports-Tree: | ||
| - | |||
| - | Den Quellcode in ein Binärformat übersetzten: | ||
| - | asl blink.s | ||
| - | |||
| - | Die Binärausgabe in das gewünschte // | ||
| - | # p2hex -r \$-\$ -F Moto -M 1 +5 blink.p blink.s19 | ||
| - | |||
| - | jetzt wird die Datei " | ||
| - | |||
| - | |||
| - | === C/C++ === | ||
| - | |||
| - | Zum C/ | ||
| - | das ist nicht das neueste aber speziell für FreeBSD angepasst | ||
| - | und stark optimiert, so das es kleineren und schnelleren Code erzeugt: | ||
| - | * Web : [[http:// | ||
| - | * Hilfe: [[http:// | ||
| - | * Ports: /// | ||
| - | |||
| - | # m6811-elf-gcc | ||
| - | # m6811-elf-gcc | ||
| - | # m6811-elf-objcopy -O srec blink.elf blink.s19 | ||
| - | |||
| - | oder so: | ||
| - | # m6811-elf-gcc -m68hc12 -nostartfiles -Wl, | ||
| - | |||
| - | jetzt wird die Datei " | ||
| - | |||
| - | |||
| - | ==== MC68HC12-Simulator ==== | ||
| - | |||
| - | |||
| - | === Simulator in Java === | ||
| - | |||
| - | Ein MC68HC12-Simulator in Java programmiert und sehr nett aufgemacht: | ||
| - | * [[http:// | ||
| - | |||
| - | # export JAVA_HOME=/ | ||
| - | # export CLASSPATH=${JAVA_HOME}/ | ||
| - | # export PATH=${PATH}: | ||
| - | |||
| - | JRE 1.1.7: | ||
| - | # java -jar simhc12.jar | ||
| - | |||
| - | ab JRE 1.1.8 (dann ist er schneller!): | ||
| - | # java -server -jar simhc12.jar | ||
| - | |||
| - | == MEMORY MAP im evaluation board mode (MC68HC12A4EVB) == | ||
| - | |||
| - | # Register block: 0x0000 - 0x01FF | ||
| - | # RAM : 0x0800 - 0x0BFF | ||
| - | # EEPROM | ||
| - | # External RAM : 0x4000 - 0x7FFF | ||
| - | # (gespiegelt in den Bereich 0x0000-0x3FFF | ||
| - | # wo gerade ein Loch ist) | ||
| - | # External ROM : 0x8000 - 0xFFFF | ||
| - | # (Monitorsimulator und Vectoren) | ||
| - | |||
| - | |||
| - | == MEMORY MAP im Single Chip Mode (MC68HC912B32) == | ||
| - | |||
| - | dann sind keine Externen Speicher verfügbar | ||
| - | |||
| - | # Register block: 0x0000 - 0x01FF | ||
| - | # RAM : 0x0800 - 0x0BFF | ||
| - | # EEPROM | ||
| - | # Flash ROM : 0x8000 - 0xFFFF | ||
| - | |||
/home/http/wiki/data/attic/hardware/microcontroller_mcu/mc68hc12.1677778408.txt · Zuletzt geändert: von manfred
