mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Seltsames SPI Verhalten (Mega88, RFM12)


Autor: Reinhold (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich betreibe ein RFM12 Funkmodul interruptbasierend an einem Mega88 mit 
Hardware-SPI. Das SPI scheint innerhalb des IRQ-Handlers nicht mehr zu 
funktionieren; es wird das erste Byte der (zwei Byte langen) 
Statusabfrage gesendet, dann ist laut Logikanalysator Feierabend.
Ist es prinzipiell ein Problem in einem IRQ Handler das SPI zu 
verwenden?

Schönen Adventssonntag noch
Reinhold

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie ist das SS-Pin konfiguriert/beschaltet?

Datenblatt:

If SS is configured as an input, it must be held high to ensure Master 
SPI operation. If the SS pin
is driven low by peripheral circuitry when the SPI is configured as a 
Master with the SS pin
defined as an input, the SPI system interprets this as another master 
selecting the SPI as a
slave and starting to send data to it.

MfG Spess

Autor: Reinhold (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SS ist als Ausgang konfiguriert, der Pin wird als ChipSelect (nSEL) für 
das RFM12 verwendet.
Wenn ich den IRQ deaktiviere und alles in der Main-Funktion veranstalte 
gibt es keine Probleme (warten bis die IRQ Leitung low ist, dann die 
Statusabfrage). Das Problem mit dem SS kenne ich schon, da bin ich auch 
schon mal drauf rein gefallen ;-(

Reinhold

Autor: Bernd M. (bernd_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, ich hatte mal das Problem mit einem AT168 und der SPI als Master wo 
nur sporadisch gesendet wurde. Die SPI Konfiguration wurde einmal beim 
init vorgenommen.

Ich habe das so gelöst, dass ich die SPI vor dem Senden als Master 
konfiguriert habe und nach dem Empfang in der ISR zurück auf Slave.
Also ein ständiges Neukonfigurieren vor jedem Byte, war eher ein 
Zufallstreffer.

Gruss
Bernd

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd M. schrieb:
> Ich habe das so gelöst, dass ich die SPI vor dem Senden als Master
> konfiguriert habe und nach dem Empfang in der ISR zurück auf Slave.

Wozu denn das? Der Master kann doch statisch bleiben und trotzdem 
empfangen.

Autor: Bernd M. (bernd_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nunja, das mit dem "sporadischem Senden" war das Problem. Es sollte 
immer eine Message mit 20 Bytes gesendet werden, es kam aber nur ein 
Byte sofort raus und der Reset dann irgendwann.

Hab mich nicht weiter mit der Fehleranalyse beschäftigt, weil meine 
eigentliche Aufgabe war die Gegenseite. Mit der beschriebenen 
Vorgehensweise macht er es so wie ich es will.

Autor: Roland (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ungünstig für die Performance in deinem Programm scheint mir die 
Warteschleife in der ISR zu sein (wait for ...),das ist unüblich in 
ISRs. Schau da mal nach,was dort eigentlich passiert und ob das nötig 
ist. Hier könnte sich ein Fehler verstecken.

Ein älteres Beispiel von mir mit SPI-IRQ. Es hängen hier bei mir externe 
Schieberegister am SPI-Port. Das erste Byte wird vom Hauptprogramm 
geschrieben, und alle restlichen werden über den Interrupt bedient.

Just heute hatte ich mir den RFM12 auch angesehen und überlegt, damit 
mal was zu machen, wenn Du Erfolg hast, dann berichte doch mal über die 
Resultate, würde mich interessieren.

Roland.

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Reset kommt, dann vielleicht mal den Watchdog bedienen?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Roland schrieb:
> Wenn Reset kommt

War sicher ein Schreibfehler und sollte Rest heissen?

Bernd M. schrieb:
> es kam aber nur ein
> Byte sofort raus und der Reset dann irgendwann.

Autor: Bernd M. (bernd_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Knut Ballhause schrieb:
> War sicher ein Schreibfehler und sollte Rest heissen?
>
> Bernd M. schrieb:
>> es kam aber nur ein
>> Byte sofort raus und der Reset dann irgendwann.

Jepp, man sollte um viertel nach zwei nix mehr posten ;-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhold schrieb:
> Das SPI scheint innerhalb des IRQ-Handlers nicht mehr zu
> funktionieren

Versuchst du eventuell, innerhalb eines SPI-Zugriffs einen weiteren
zu starten?  Das ist 'ne Falle.

Wenn man sowas macht, sollte man einfach während der SPI-Zugriffe
(so lange dauern die bei voller Geschwindigkeit ja nicht) die
Interrupts blockieren, zumindest die vom Funkmodul.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.