STM8S208 - “beCAN” Controller


Direkt adressierbare Register

Wie eingangs beschrieben enthält der beCAN Controller eine Reihe von direkt adressierbaren Registern die verschiedene Einstellungen bzw. Statusabfragen ermöglichen. Diese Register sind in den Speicherbereich des STM8S208 auf die Adressen 0x00.5420h bis 0x00.5427h gemapped. Lesende bzw. schreibende Zugriffe auf diese Register sind zu jeder Zeit möglich.

Funktions Einstellungen (CAN_MCR)

Der CAN-Bus bietet verschiedene Funktions-Varianten die System-spezifisch verwendet werden können. Diese Funktionen können in dem beCAN Register CAN_MCR freigeschaltet oder geblockt werden.

CAN_MCR Register - Master Controll Register                                                                                                 (0x00.5420h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_MCR TTCM ABOM AWUM NART RFLM TXFP SLEEP INRQ

TTCM -  Time Triggered Mode (Übertragung von Zeitmarken)

Im Register CAN_MCR (CAN Master Control Register), Bit [7], befindet sich das “ TTCM”-Bit (Time Triggered Communication Mode). Wird dieses Bit gesetzt so überträgt der Controller mit jeder Nachricht einen Zeitstempel. Diese Funktionalität ist auf den Bausteinen STM8S208 eventuell nicht möglich, das „TTCM“-Bit muß auf „0“ programmiert werden.

ABOM -  Automatic „Bus OFF Management

Bit [6] des CAN_MCR ist das Bit „ABOM“ zur Steuerung des automatischen „Bus OFF Management“. Wird das Bit gesetzt so verläßt der Controller automatisch nach 128 x 11 Idle Bits (rezessive Bits) den Bus-OFF Modus. Bei nicht gesetztem „ABOM“ muß das Verlassen per Software initiiert werden.

AWUM - Automatic WAKE-UP Management

Befindet sich der Controller im SLEEP Modus und empfängt in diesem Zustand eine Nachricht so kann er automatisch aus dem SLEEP Modus aufwachen. Dabei wird das Bits „SLEEP “ im CAN_MCR und das Bit „SLAK“ im CAN_MSR per Hardware zurückgesetzt, während das „WKUI“ Bit im CAN_MSR gesetzt wird. Das „AWUM“ und das „SLEEP“ Bit im CAN_MCR müssen gleichzeitig gesetzt werden. Der automatische Wake-Up wird nicht aktiviert wenn das „AWUM “ Bit [5] im CAN_MCR gelöscht ist.

NART - Automatic Re Transmission (Automatische Sendewiederholung)

Eine weitere Besonderheit des CAN-Busses ist die automatische Sendewiederholung einer Nachricht falls diese bei der Bus-Zuweisung (Arbitration) nicht gesendet werden konnte. Wird das „NART“ Bit im CAN_MCR gesetzt so erfolgt eine automatische Sendewiederholung (Re-Transmission) bis die Nachricht übermittelt werden konnte.

Ist das „NART“ Bit [4] im CAN_MCR rückgesetzt wird kein Versuch unternommen eine geblockte Nachricht neu zu senden, dies entspricht dem Zustand nach einem Reset.

RFLM - Receive-FIFO Load Management

Das Bit [3] des CNA_MCR beeinflusst die Funktion des Empfangs-FIFOs das bei gesetztem „ RFLM“ neu eingehende Nachrichten verwirft, im Falle eines nicht gesetzten „RFLM “ Bits aber die vorher empfangene Nachricht überschreibt.

TXFP -  Transmit FIFO Priority

Ist mehr als eine Sende-Mailbox (Puffer) gefüllt so entscheidet das Bit [2] des CAN_MCR über die Reihenfolge der nächsten zu senden Nachricht. „TXFP“ ist nach dem Reset „0“ und als Folge davon ist die Priorität des CAN-Identifiers (CAN-ID) maßgebend. Im gesetzten Zustand von „TXFP “ wird dagegen entsprechend der zeitlichen Abfolge der Sendeanforderungen verfahren.

Die verbleibenden Bit [1] („SLEEP“) und Bit [0] („INRQ “) wurden bereits anfangs besprochen und dienen dazu den Modus des Controllers zu setzen (Sleep oder Initialisation).

Status Rückmeldungen (CAN_MSR)

Informationen über den aktuellen Zustand und die Funktion werden über das CAN_MSR angeboten. Folgende „Flags“ (Zustandsbits) sind im CAN_MSR verfügbar und können per Software gelesen werden.

CAN_MSR Register - Master Status Register                                                                                                 (0x00.5421h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_MSR reserv. reserv. RX TX WKUI ERRI SLAK INAK

RX - RX (Empfangs) Modus Bit

Das „RX“ Bit [5] im CAN_MSR signalisiert den Betrieb im Empfangs-Modus durch eine „1“.

Da der CAN-Bus nur eine Nachricht zu einer Zeit übertragen kann ist eine Identifikation des Übertragungszustandes möglich. Werden Nachrichten empfangen ist der Bus belegt und kann nicht für eine eigene Übertragung benutzt werden.

TX -  TX (Sende) Modus Bit

Das „TX“ Bit [4] im CAN_MSR signalisiert den Betrieb im Sende-Modus durch eine „1“.

Da der CAN-Bus nur eine Nachricht zu einer Zeit übertragen kann ist eine Identifikation des Übertragungszustandes möglich. Wird im Sende-Modus der Bus aufgrund der Priorität verloren wechselt der Controller in den Empfangs-Modus.

WKUI -  Wake-Up Interrupt

Befindet sich der beCAN Controller im „Sleep“ Modus und empfängt ein SOF Bit (Start Of Frame) so wird das „WKUI“ Bit [3] im CAN_MSR per Hardware gesetzt und signalisiert einen „Wakeup Interrupt“. Durch das Setzen des Bits wird auch ein Status Change Interrupt erzeugt falls das „ WKUIE“ Bit im CAN_IER Register gesetzt ist.

Das „WKUI“ Bit wird gelöscht wenn per Software eine „1“ ( !) in dieses Bit geschrieben wird.

ERRI -  ERRor Interrupt

Alle im CAN_ESR (Error Status Register) enthaltenen Fehler-Bits können in einer ODER- Verknüpfung das „ERRI“ Bit [2] im CAN_MSR setzen falls dass der dem Bit entsprechende Interrupt im CAN_EIER Register freigeben wurde.

Das Setzen des „ERRI“ Bits generiert einen Status Change Interrupt falls das „ERRIE“ Bit im CAN_EIER Register gesetzt wurde.

Das „ERRI“ Bit wird gelöscht wenn per Software eine „1“ !) in dieses Bit geschrieben wird.

SLAK -  SLEEP Acknowledge

Das eingangs bereits beschriebene „SLAK“ Bit [1] im CAN_MSR signalisiert den SLEEP Zustand des Controllers und wird durch dessen Hardware gesetzt. Es wird ausgelöst durch das Setzen des „SLEEP“ Bits im CAN_MCR per Software.

Gelöscht wird das „SLAK“ Bit ebenfalls durch Hardware wenn der Controller den SLEEP Modus verlässt.

INAK -  INIT Acknowledge

Ebenfalls bereits beschrieben wurde das „INAK“ Bit [0] im CAN_MSR das einen aktiven INIT Modus anzeigt. Gesetzt wird das „INAK “ Flag per Hardware wenn eine Initialsierungs-Anforderung über das Bit „INRQ“ im CAN_MCR erfolgt ist.

Das „INAK“ Bit wird automatisch gelöscht wenn der Controller den INIT-Zustand verlässt (durch Rücksetzen des „INRQ“ Bits) und das Bus Interface synchronisiert wurde.

Transmit Status Register (CAN_TSR)

Das CAN_TSR Register beinhaltet Informationen über den Zustand der drei Sende-Mailboxen und wird diesbezüglich von der CAN-Hardware gesetzt. Im Wesentlichen wird für jede Mailbox ein Flag (RQCPn) nach der Anforderung zur Übertragung der Mailbox oder eines Abbruchs (Abort) und ein weiteres Flag (TXOKn) nach einer gelungenen Übertragung des Inhalts, zur Verfügung gestellt.

CAN_TSR Register - Transmit Status Register                                                                                                 (0x00.5422h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_TSR reserv. TXOK2 TXOK1 TXOK0 reserv. RQCP2 RQCP1 RQCP0

TXOKn - Transmit OK (n = Mailbox Nummer)

Die „Transmit OK“ TXOKn Bits werden entweder durch einen erneuten Request für die Übertragung oder durch ein gezieltes Rücksetzen per Software gelöscht.

RQCPn -  Request Completed (n = Mailbox Nummer)

Die „Request Completed“ RQCPn Bits müssen per Software zurückgesetzt werden, indem eine logische “1” geschrieben wird.

Transmit Priority Register (CAN_TPR)

Die einzelnen Sende-Mailboxen werden hinsichtlich der Priorität ihrer Übertragung durch die CAN-ID (niedrigste ID zuerst) für die Übertragung vorgesehen.

CAN_TPR Register - Transmit Priority Register                                                                                                 (0x00.5423h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_TPR LOW2 LOW1 LOW0 TME2 TME1 TME0 CODE1 CODE0

LOWn -  Lowest Priority (n = Mailbox Nummer)

Sind mehrere Mailboxen zur Übertragung bereit so wird die Mailbox mit der niedrigsten Priorität durch die LOWn Bits gekennzeichnet die per Hardware gesetzt werden. Da nur eine Mailbox die niedrigste Priorität haben kann ist jeweils nur eines der LOWn Bits gesetzt.

TMEn -  Transmit Mailbox Empty (n = Mailbox Nummer)

Die TMEn Flags signalisieren dagegen eine leere Mailbox, entsprechend ihres Index („n“) und werden von der CAN-Hardware gesetzt. Mehrere TMEn Bits können gesetzt sein da mehr als eine Mailbox leer sein kann.

CODE[1:0] -  Nächste freie Mailbox

Der Mailbox-CODE (CODE0, CODE1) liefert die Information welches die nächste freie Mailbox ist, bzw. für den Fall dass alle Mailboxen belegt sind, die Mailbox-Nummer mit der geringsten Priorität, die gegebenfalls per Software überschrieben werden kann. Die CODE-Bits beinhalten den Index der Mailbox die frei ist bzw. mit der geringsten Priorität auf die Übertragung wartet.

Receive FIFO Register (CAN_RFR)

Die eingehenden CAN Messages werden in einer FIFO Struktur gespeichert und können entsprechend ihrem Eingang nacheinander per Software gelesen und verarbeitet werden. Da der Zugriff zu einer Zeit nur auf eine Mailbox möglich ist muß dem FIFO mitgeteilt werden dass die Verarbeitung des Mailbox Inhalts abgeschlossen wurde.

CAN_RFR Register - Receive FIFO Register                                                                                                 (0x00.5424h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_RFR reserv. reserv. RFOM FOVR FULL reserv. FMP1 FMP0

RFOM -  Receive FIFO Output Mailbox (RFOM)

Dies geschieht durch beschreiben des RFOM Bits im Receive FIFO Register. Durch das Setzen des Bits wird die aktuelle Mailbox freigegeben und automatisch steht die nächste belegte Mailbox für einen Zugriff bereit. Sobald die „alte“ Mailbox freigegeben wurde setzt die CAN-Hardware das RFOM Bit wieder zurück.

FOVR  -  FIFO OVer Run( Überlauf des Receive FIFO)

Ein Überlauf des Empfangs-FIFOs wird von der CAN-Hardware durch das Setzen des FOVR , FIFO Overrun Bits angezeigt. Das Zurücksetzen des Flags geschieht durch beschreiben des Bits mit „1“.

FULL -  Receive FIFO Full ( Alle drei Receive FIFOs sind voll)

Vor einem drohenden Überlauf wird im CAN_RFR Register noch das FULL Flag durch die Hardware gesetzt und zeigt so an dass alle drei Empfangs-Puffer gefüllt sind.

FMP[1:0] -  FIFO Message Pending (Anzahl der aktuellen FIFO Messages)

Die beiden Bits FMP0 und FMP1 beinhalten die Anzahl der im FIFO wartenden Messages. Das Management des FMP-Eintrags geschieht ausschliesslich durch die CAN-Hardware. Jede neu empfangene Nachricht erhöht den FMP-Wert während die Freigabe einer Mailbox über das RFOM Bit den FMP-Wert dekrementiert.

Interrupt Freigabe Register (CAN_IER)

Das Interrupt Enable Register schaltet einzelne Ereignisse innerhalb des beCAN Controllers als Interrupt frei. Bei nachfolgenden Bits bedeutet jeweils ein gesetztes Bit die Freigabe des Interrupts.

CAN_IER Register - Interrupt Enable Register                                                                                        (0x00.5425h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_IER WKUIE reserv. reserv. reserv. FOVIE FFIE FMPIE TMEIE

WKUIE -  Wake-Up Interrupt Enable (Wake Up Interrupt Freigabe)

Das „WKUI“ Flag im CAN_MSR wird als Interrupt durchgeschaltet falls das „WKUIE“ Bit [7] im CAN_IER gesetzt ist.

FOVIE -  FIFO Overrun Interrupt Enable (FIFO Überlauf Interrupt Freigabe)

Das „FOVIE“ Bit [3] im CAN_IER aktiviert einen Interrupt bei einem Überlauf des Empfangs-FIFOs. Das entsprechende „FOVR“ Flag das den Überlauf des FIFOs signalisiert befindet sich im CAN_RFR Register

FFIE -  FIFO Full Interrupt Enable (FIFO Voll Interrupt Freigabe)

Der FIFO Full Interrupt kann durch das „FFIE“ Bit [2] im CAN_IER Register aktiviert werden. Auslöser für den Interrupt ist das Setzen des „ FULL“ Bits im CAN_RFR (Receive FIFO Register).

FMPIE -  FIFO Message Pending Interrupt Enable ("FIFO Nachricht vorhanden" Interrupt Freigabe)

Das “FMPIE” Bit [1] im CAN_IER schaltet einen Interrupt frei der durch den Übergang des Bit-Feldes “FMP” , Bit [1..0] im CAN_RFR von 0x00b nach 0x01b initiert wird. D.h. wenn das bis dato leere Empfangs-FIFO mit einer Nachricht gefüllt wird.

TMEIE -  Transmit Mailbox Empty Interrupt Enable ("Sende Mailbox frei" Interrupt Enable)

Das “TMEIE” Bit [0] im CAN_IER schliesslich aktiviert einen Interrupt der eine freie Mailbox (Nachrichten Puffer) für die Übertragung einer Nachricht anzeigt. Dazu werden die „RQCPx“ Bits (RQCP0, RQCP1 oder RQCP2) im CAN_TSR, ODER-Verknüpft und das resultierende Signal wird als Interrupt weitergeleitet.

Diagnose Register (CAN_DGR)

CAN_DGR Register - Diagnose Register                                                                                                 (0x00.5426h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_DGR reserv. reserv. reserv. TXM2E RX SAMP SILM LBKM

TXM2E -  Transmit Mailbox 2 Enable (Sende Mailbox Nr.2 Freigabe)

Der Default-Wert des „TXM2E“ Bits nach einem Reset ist „0“. In dieser Einstellung ist die Transmit Mailbox 2 nicht freigegeben (Kompatibilität zum ST7 Microcontroller). Durch das Setzen des Bits wird die TX Mailbox 2 aktiviert. Die Freigabe ist empfehlenswert.

RX -  RX Signal Level (Signalpegel am Empfangs-Pin)

Das „RX“ Bit spiegelt den aktuellen Wert des Receive-Pins (CAN_RX) des CAN Controllers.

SAMP -  RX Sampling Value (Abtastwert des letzten RX Werts)

Der während des letzten Abtast-Zeitpunkts ermittelte Wert des Receive Pins (CAN_RX) wird im Bit „ SAMP“ gespeichert und kann dort per Software gelesen werden.

SILM -  Silent Mode Enable (Freigabe des "Silent Modes")

Durch das Setzen des Bits „SILM“ wird der „Silent Mode“ aktiviert der den Empfang von Bus-Nachrichten ermöglicht aber den Bus selbst nicht treibt (Bus Snooping).

LBKM -  Loop Back Mode (Freigabe des "Loop Back Mode")

Das Bit „LBKM“ aktiviert den „Loop Back Mode“ wenn es auf „1“ gesetzt wird. Im Loop Back Mode wird der TX-Ausgang mit dem RX-Eingang verbunden.

 Page Select Register (CAN_PSR)

Dieses Register wurde unter "Register Struktur" bereits beschrieben und beinhaltet die “Page-Adresse” für die Auswahl einer der acht Pages (Seiten) die in den Speicherbereich 0x00.5428h bis 0x00.5437h eingeblendet werden können.

CAN_PSR Register - Page Select Register                                                                                                 (0x00.5427h)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
CAN_PSR reserv. reserv. reserv. reserv. reserv. PS2 PS1 PS0

Der in die Bitstellen PS[2:0] eingetragene Wert selektiert folgende Seiten für die Anzeige im Page-Adressbereich.

BeCAN Page Select Liste (Paging Adressen)
Mailbox/Pages Page (Seite) PS2 PS1 PS0
TX Mailbox 0 Sende-Mailbox 0 0 0 0 0
TX Mailbox 1 Sende-Mailbox 1 1 0 0 1
Filter Pages 0:1 CAN-ID Filter 0 und 1 2 0 1 0
Filter Pages 2:3 CAN-ID Filter 2 und 3 3 0 1 1
Filter Pages 4:5 CAN-ID Filter 4 und 5 4 1 0 0
TX Mailbox 2 Sende-Mailbox 2 5 1 0 1
Configuration/Diagnostics „Register“ Auswahl 6 1 1 0
RX Mailbox (FIFO) Empfangs FIFO (3 Mailboxen) 7 1 1 1

Copyright Notiz

Dieses Dokument sowie dessen Inhalt, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2017) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.