Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Open Mini RS232 mit 19200Baud möglich ? Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 29.03.2006 17:58)
 Als Antwort auf Re: Open Mini RS232 mit 19200Baud möglich ? von Topmail - 23.03.2006 18:07
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Mini M-Unit, Open-Mini Station
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

Bisherige Antworten: