
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo zusammen Es existieren einige Dokumente auf dem Freescale-Server, in denen beschrieben wird, wie die 68HC08-Kontroller, die kein Hardware-SCI besitzen, mit einem "full-duplex interrupt-driven software SCI module" mit Hilfe des Timer-Interface-Moduls (TIM) ausgestattet werden können. Im Application Note AN2502 gibt es Assembler-Sourcecode für eine Interrupt-Software-SCI, den ich einmal an die OM angepaßt habe. Die Anwendung des Moduls ist eigentlich recht einfach. Für das SCI muß eine INCLUDE-Datei mit der IIAR eingebunden werden. Die Routinen benötigen fünf beliebige Bytes im RAM und vier Konstanten-Definitionen für die Baudrate. Die Baudrate läßt sich frei wählen, allerdings sind laut Application Note für höhere Baudraten eigentlich ein höherer Bustakt als 3.2 MHz erforderlich. Also bei Bedarf einen externen Quarz oder Taktgeber verwenden. Es werden außerdem zwei Timer-Interrupts belegt und der "20-ms-Interrupt" wird deaktiviert. Deshalb läuft u.a. die interne Uhr nicht weiter und PAUSE arbeitet nicht. Natürlich liegen TXD und RXD an getrennten Pins des Kontrollers. Die SCI benötigt also nicht mehr nur einen Pin, sondern zwei. Man könnte noch b.B. einen RS232-Buffer hinzufügen. ' --------------------------------------------------------------------- ' Software-Interrupt-SCI-Modul nach der Application Note AN2502 ' umgesetzt auf die OM von Dietmar Harlos am 29. Maerz 2006 ' --------------------------------------------------------------------- ' Eine Beschreibung gibt es im Application Note AN2502 von Freescale. INCLUDE "om.def" DEFINE a,b,c BYTE ' --- Definitionen fuer das Software-SCI ------------------------------ DEFINE rSCSR BYTE ' SCI Status Register DEFINE rSCRDR BYTE ' SCI Receive Data Register DEFINE rSCRSR BYTE ' SCI Receive Shift Register DEFINE rSCTDR BYTE ' SCI Transmit Data Register DEFINE rSCTSR BYTE ' SCI Transmit Shift Register ' 9600 Baud @ 3.2 Mhz (fuer TIM-Prescaler von 1) 'DEFINE BITHI &h01 ' BITHI:BITLO = 3.2E6/9600 = $014d 'DEFINE BITLO &h4d 'DEFINE BIT1HI &h01 ' BIT1HI:BIT1LO = $014d*1.3 - 47 = $0182 'DEFINE BIT1LO &h82 ' 19200 Baud @ 3.2 Mhz (fuer TIM-Prescaler von 1) DEFINE BITHI &h00 ' BITHI:BITLO = 3.2E6/19200 = $00a6 DEFINE BITLO &ha6 DEFINE BIT1HI &h00 ' BIT1HI:BIT1LO = $00a6*1.3 - 47 = $00a9 DEFINE BIT1LO &ha9 ' --- Programmstart --------------------------------------------------- INCLUDE "sisci.iia" ' Die IIAR muss am Programmstart stehen ' --- Hauptprogramm --------------------------------------------------- #main UIRTim0=ON ' User-Assemblerroutine fuer TIM0 aktivieren UIRTim1=ON ' User-Assemblerroutine fuer TIM1 aktivieren RXTX_config ' TIM Channel 0 & 1 umkonfigurieren WHILE TRUE a=GetByte ' Demo: Byte empfangen und Byte senden PutByte a WEND Viel einfacher wäre es übrigens, wenn man das Senden und Empfangen über das Toggeln und Polling von I/O-Ports durchführen würde. So macht es auch das Betriebssystem. Damit sind sicherlich noch höhere Baudraten als 19200 Baud realisierbar. Nur eben kein gleichzeitiges Senden und Empfangen (Full-Duplex) oder Empfang im Hintergrund während der Programmausführung. Auch Mischlösungen, wie Empfang über Interrupt und Senden über I/O-Ports wären denkbar. Viele Grüße Dietmar Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |