STM8S208 - “beCAN” Controller
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.
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 |
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.
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.
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.
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.
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.
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).
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 |
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.
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.
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.
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.
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.
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.
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 |
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.
Die „Request Completed“ RQCPn Bits müssen per Software zurückgesetzt werden, indem eine logische “1” geschrieben wird.
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 |
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.
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.
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.
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 |
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.
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“.
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.
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.
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 |
Das „WKUI“ Flag im CAN_MSR wird als Interrupt durchgeschaltet falls das „WKUIE“ Bit [7] im CAN_IER gesetzt ist.
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
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).
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.
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.
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 |
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.
Das „RX“ Bit spiegelt den aktuellen Wert des Receive-Pins (CAN_RX) des CAN Controllers.
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.
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).
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.
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 |
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.