STM8S208 - “beCAN” Controller
Ist eine oder sind mehrere Empfangs-Mailboxen gefüllt, signalisiert der beCAN diesen „pending“ Status über die beiden „FMP“ Bits [1..0] im CAN_RFR Register (Receive FIFO Register). Die beiden Bits beinhalten die Anzahl der „wartenden“ Nachrichten – also, 0 = Keine Nachricht, 1 = 1 Nachricht, 2 = 2 Nachrichten und 3 = 3 Nachrichten.
Die „FMP“ Bits werden automatisch bei jeder neu empfangenen Nachrichten von der Hardware inkrementiert und ebenfalls wieder freigegeben (dekrementiert) wenn das „RFOM“ Bit [5] im CAN_RFR gelöscht wurde. Das CAN_RFR Register besitzt eine statische Adresse und kann jederzeit vom Prozessor gelesen werden.
Der Übergang der „FMP“ Werte von 0x0h (keine Nachricht wartend) auf 0x1h (eine Nachricht wartend) kann durch Freigabe des zugehörigen Interrupts über das „FMPIE“ Bit [1] im CAN_IER unmittelbar signalsiert werden. Darauf folgende Nachrichten die im FIFO landen erzeugen keinen neuen Interrupt.
Das „FULL“ Bit [3] des CAN_RFR ist ein Indikator dass alle drei Eingangs-Mailboxen gefüllt sind und kann leicht durch einen Bit-Test abgefragt werden, ohne die FMP-Bits auswerten zu müssen. Die Freigabe einer Mailbox über „RFOM“ bzw. ein Schreibvorgang (mit „1“) auf das Bit „FULL“, wird das „FULL“ Bit löschen.
Der „FULL“ Status kann durch eine Interruptfreigabe mit dem „FFIE “ Bit [2] im CAN_IER Register in Echtzeit behandelt werden um eine Überlauf zu vermeiden.
Wird eine neue Nachricht ohne Fehler empfangen und die drei Eingangs-Mailboxen sind zu diesem Zeitpunkt bereits gefüllt, so wird ein FIFO Überlauf erzeugt. Dabei wird das „FOVR“ Bit [4] im CAN_RFR durch die Hardware gesetzt.
Im beCAN „Interrupt Enable Register“ (CAN_IER) kann durch das Setzen des „ FOVIE“ Bit [3] das „FOVR“ Bit als Interrupt weitergeleitet werden um den Überlauf zu signalisieren.
Das „ FOVR“ Bit muss nach einer gewünschten Aktion per Software (durch beschreiben mit „1“) zurückgesetzt werden.
Wie beschrieben kann eine Nachricht im Empfangs-FIFO durch einen Interrupt bzw. durch Abfrage des Statusregisters („ FMP“ Bits [1..0]) erkannt werden. Der CAN-Treiber in der Anwendersoftware kann danach das CAN_PSR mit der „Page“-Adresse ( „PS“ = 0x111b ) beschreiben und erhält damit Zugriff auf die „nächste“, sprich am längsten wartende Empfangs-Mailbox.
Der Inhalt der Mailbox kann von der (Treiber) Software teilweise oder als Ganzes kopiert und der Anwendersoftware zur Verfügung gestellt werden.
Sind die Daten gesichert so wird die Mailbox durch Setzen („1“) des „RFOM“ Bit [5] im CAN_RFR wieder freigegeben. Durch diese Aktion werden die „FMP“ Bits dekrementiert um die reduzierte Anzahl von „wartenden“ (pending) Mailboxen zu signalisieren. Das Beschreiben des „ RFOM“ Bits für den Fall dass keine Nachrichten im FIFO sind, hat keinen Einfluß.
Nach der Freigabe einer „pending“ Mailbox wird automatisch die nächste aktive („volle“) Empfangs-Mailbox über die Adressierung der „FMP“ Bits [1..0] mit 0x111b zugänglich.
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.