Willkommen in unserer Community

Werde Teil unserer Community und registriere dich jetzt kostenlos ...

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C USARTD0 als SPI?

Dieses Thema im Forum "Software" wurde erstellt von Janiiix3, 17. Januar 2017.

  1. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Hallöchen,

    Ich sitze gerade mal wieder an meinem Evaluation Board.
    Mir stellt sich gerade die Frage, wie ich den externen Flash bedienen kann. Laut Zeichnung sind die SPI Pins vom Flash Baustein an "USARTD0" angeschlossen. Kann man den Intern umstellen (Mapping?) also das ich die SPI Pins auf andere I/O´s konfiguriere?

    Das Board benutzt einen "ATXMEGA256A3BU".
     

    Anhänge:

  2. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.698
    Zustimmungen:
    38
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Der USART kann auch als SPI (Master?) genutzt werden. Schau doch einfach mal diesbezüglich ins Datenblatt.
     
  3. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Okay...
     
  4. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.698
    Zustimmungen:
    38
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Der UART kann auch als USART genutzt werden - das S steht für synchronous. Er besitzt also ein Clock-Latch-Modul. Von dort ist's dann zum SPI nicht mehr weit.k
    Unabhängig davon kann eine Schnittstelle natürlich auch in Software an beliebigen Beinen nachgebildet werden. Gerade bei Hochsprachen, wo das dann in Form irgendwelcher Bibliotheken eingebunden werden kann oder gar Bestandteil der IDE ist. Manchen ist dann gar nicht bewußt, das er unnötigen Code/Rechenzeit verbraucht, was die periphäre Hardware im Hintergrund selbst könnte.
     
    #4 LotadaC, 17. Januar 2017
    Zuletzt bearbeitet: 17. Januar 2017
  5. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Ich habe das "sanft" überlesen. Danke dir.
    Das sollte aber logisch sein, dass Software ineffektiver ist als Hardware.
     
  6. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Verstehe ich das richtig, dass ich die "Baudrate" bzw, SCK genau so einstellen kann wie beim UART? Wird das genau so berechnet?
    CLK / (BSEL / BSCALE)
     
  7. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Wenn du das USART Modul im Master SPI Mode verwendest, kannst du SPI Clock folgendermaßen berechnen, bzw. BSEL...

    xmega_master_spi_clk.png

    Als Clock Source geht bei Master SPI nur der interne Takt für die Peripherie (fper).
     
  8. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.698
    Zustimmungen:
    38
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Beim U(S)ART hast Du zwei Schieberegister, eins zum Senden (das an TxD angeschlossen ist), und eins zum Empfangen (an RxD). Beim echten SPI gibts nur ein gemeinsames, außerdem kehrt sich im Slave-Modus die Datenrichtung der Pins um (deswegen ja MO-SI, MI-SO).

    @Dirk , ist das der Grund, warum der USART nur den Master-Mode nachbilden kann? Beim USI geht das mit dieser Einschränkung doch auch.

    P.S.: gerade gesehen, daß der XMega-USART auch IrDA unterstützt, und fraktionale(?) Baudraten... das macht den neuen "XTiny" noch interessanter
     
  9. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Dem USART Modul fehlt der SelectSlave Pin und die Logik dahinter, deswegen geht Slave nicht. Bei Master kann man ja jeden beliebigen freien IO pin für SelectSlave Signal verwenden, wenn benötig.
     
  10. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.698
    Zustimmungen:
    38
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Es fehlen:
    • SlaveSelect mit tristate-Schalten des DO-Pins bei nonselect
    • Datenrichtungsumkehr zwischen Master- und Slavemode
    Beides hast Du beim USI auch nicht, und da gehts doch trotzdem (muß man selbst realisieren, aber das schieberegister taktet dann in Hardware)
     
  11. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Dann fallen mir noch folgende Gründe ein ...
    • USART-Modul ist kein USI-Modul
    • Entwicklungen liegen zeitlich auseinander
    • Kostengründe
    • andere Abteilung
    • Entwickler vom USART Modul macht beim Entwickler vom USI Modul immer Striche auf die Kaffeeliste, der ist dann stinkig und rückt seinen VHDL Source nicht raus ;)
     
    LotadaC gefällt das.
  12. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Also quasie ohne meine PLL?
     
  13. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Nein, das bedeutet nur, dass das SPI Modul seinen Takt über den fractional Baud Rate Generator erhält und dieser erhält wiederum seinen Takt über Peripheral Clock. Also extern takten kann man das SPI Modul nicht, ist auch egal. Das hat nichts mit PLL zu tun.
     
  14. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Okay,

    Das heißt ich muss erst Prescaler A - C konfigurieren und dann habe ich ClkPer?

    ATXMEGA256A3BU_PRESCALER.jpg

    Das ist doch aber ein bisschen doof, dass heißt wenn ich diesen USARTD0_SPI nutzen möchte, muss ich dafür extra meine ClkCPU runter schrauben...
     
  15. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.698
    Zustimmungen:
    38
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Du hast noch Prescaler B und C, die die CPU-Clock nicht betreffen, um die peripheral Clock zu drosseln. Und im USART-Modul selbst dann nochmal BSEL (aber nicht BSCALE).

    Nachtrag: war natürlich Quark, aber BSEL sollte reichen
     
    #15 LotadaC, 18. Januar 2017
    Zuletzt bearbeitet: 18. Januar 2017
  16. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Laut Diagramm sehe ich aber das Prescaler B sowohl C die CLK_CPU beeinflussen.
    Wenn ich dort Prescaler_A.: CLK/1 und Prescaler _B.: CLK/1 einstelle, kann ich nur noch CLK_PER durch BSEL drosseln. Ich arbeite mit 32Mhz (muss aktuell zwar noch nicht sein aber wer weiß), dass würde bedeuten.: 32.000.000 / BSEL ?
     
  17. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Also irgendwo oben habe ich ja mal ein Screenshot mit Gleichungen reingestellt, nach BaudRate oder BSEL aufgelöst.
     
  18. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Ist ja inordnung.
    Mir ist jetzt immer noch nicht klar, wenn ich mit einer Frequenz von 32Mhz arbeite (CPU Clock) und ich an den Prescalern nichts weiter einstelle, ob ich dann mit ClkPer = 32Mhz rechnen kann.

    Nachtrag.:

    Habe dort glaube ich was verwechselt. BSEL ist ja 12 Bit breit (4095 Dez.) Das habe ich mit BSCALE verwechselt.

    32.000.000 / 4096 wären dann ja 7,814 kHz, dann passt mein Verständnis und meine Rechnung.
     
    #18 Janiiix3, 18. Januar 2017
    Zuletzt bearbeitet: 18. Januar 2017
  19. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    CLKper hat gleiche Frequenz wie CLKcpu und kann aktiv sein, wenn CLKcpu inaktiv ist (sleep mode).
    CLKper ist synchron zu CLKcpu.

    ?

    xmega_master_spi_clk.png

    Hier noch einmal die Gleichungen.
     
  20. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Moin.

    #define SPI_USART_CALC_BSEL(BAUD) ((F_CPU/(BAUD*2))-1)

    mache ich hier was falsch um BSEL zu berechnen? Komme irgendwie nicht auf einen Nenner...
     

Diese Seite empfehlen

  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)