hallo hallo, ich hab mir schon wieder zwei tage versaut, mit spi. problem: ich habe SPI-anweisungen geschrieben und das klappt soweit. nur, wenn ich die anweisung in eine schleife setze scheint sich der takt um den faktor 20 zu erhöhen. beispiel: reset ... spi_test loop: rjmp loop ...funktioniert reset ... spi_test //funktioniert loop: spi_test //20fache Geschwindigkeit rjmp loop ????? kann jemand das problem eingrenzen ?????
Gast
#524702
Was hat das denn mit dem SS-Pin zu tun? Außerdem kann meine Glaskugel leider nicht erkennen, was "spi_test" überhaupt macht...
naja, deiner Glaskugel sei gesagt, dass "spi_test" mal angenommen ein byte übermitteln soll. der ablauf ist ss auf low setzen, daten schicken, ss wieder auf high. klappt soweit, aber nicht in der Schleife. nochwas für das Kügelchen: SPI_TEST: cbi PORTB, 0x02 out SPDR,data SPI_Fertisch: in temp, SPSR sbrs temp, SPIF brne SPI_Fertisch sbi PORTB, 0x02 ret
Erde an Glaskugel: - CPU ? - SPI-init ? - SPI-Speed erwartet, gemessen, wie gemssen ? - komplettes Testprogramm als Anhang Mist, jetzt isse ganz trüb, nichts mehr zu erkennen. Peter
Gast
#525081
Klar, kann auch nicht funktionieren. Eine Funktion ruft man ja auch mit einem (r)call-Befehl auf...
Gast
#525082
...Mich wundert allerdings, dass die erste Variante angeblich funktioniert...
ja, also hier das komplette programm. wie gesagt, die funktion klappt, solange sie nich in der schleife steckt.
irgendwelche vorschläge?
Gast
#525499
Also im Datenblatt machen die das so (ohne SS): out SPDR,r16 Wait_Transmit: sbis SPSR,SPIF rjmp Wait_Transmit ret Vieleicht macht das zugreifen auf SPSR einen Unterschied ? Keine Ahnung, bin kein Assemblerheld. Schreibs doch in C ;) duckweg
Gast
#525542
Ich versuchs noch mal ;) > nur, wenn ich die anweisung in eine schleife setze scheint sich der > takt um den faktor 20 zu erhöhen. ldi temp,0x5D // SPI Takt F_CPU/16 out SPCR,temp ldi temp,(0<<SPI2X) // kein Double Speed out SPSR,temp Also bei 16MHz CPU Takt hast du 1MHz SPI Takt. Der kann sich aber nicht um den Faktor 20 vergrößern. Maximaler SPI Takt bei 16MHz wäre 8MHz. Solange du in SPCR SPR1 und SPR0 nicht änderst, ändert sich auch nicht dein SPI Takt. Der bleibt starr gekoppelt an den Systemtakt. Wie hast du das 20 fach gemessen ?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.