SAM-4S, Atmel Studio: Wo ist delay.h, wo ist atomic.h?

Gast #6138398
Hallo,

habe bei den 8-Bittern schon oft delay_us(), atomic_block(){}
verwendet.
Für den SAM-4S finde ich die Bibliotheken nicht (verwende auch ASF).
- Gibt es irgendwo Ersatz für delay_us()?
- Wo finde ich atomic_block(RESTORESTATE){}? Das muss es doch auch für 
den SAM geben?
Moderator Persönliche Seite
Alexxx schrieb:

> Für den SAM-4S finde ich die Bibliotheken nicht (verwende auch ASF).
> - Gibt es irgendwo Ersatz für delay_us()?

Ich hatte mal einen Ersatz für die Cortex-M0+ geschrieben (SAMD21 etc.), 
aber ich denke, auf einem Cortex-M3 hat das kaum noch Sinn. Nimm lieber 
einen Timer.

> - Wo finde ich atomic_block(RESTORESTATE){}? Das muss es doch auch für
> den SAM geben?

Hat niemand als Bibliothek gebaut und geliefert, aber die Ideen kannst 
du dir natürlich aus der avr-libc klauen. Den Interruptstatus ermittelst 
du mit __get_PRIMASK(), die Interrupts werden mit __disable_irq() 
ausgeschaltet.
Den von __get_PRIMASK() erhaltenen Wert übergibst du am Ende dann einem 
__set_PRIMASK(). Also etwa so:
1
   int intstatus = __get_PRIMASK();
2
   __disable_irq();
3
   // interrupt-protected code goes here
4
   __set_PRIMASK(intstatus);

Allerdings bist du natürlich hier dahingehend komfortabler als auf einem 
8-Bitter, dass du bereits 32-bit-Integers ohnehin "atomic" im Zugriff 
hast.
Gast
So in der Art kann man ein "taktgenaues" Delay bauen:

https://github.com/Erlkoenig90/stm32delay/blob/master/src/mysleep.S

Das muss man aber auf die konkrete Anwendung "kalibrieren", d.h. die 
gewünschte Taktzahl auf die zugehörigen Iterationen umrechnen. Je nach 
Flash/RAM-Anbindung, Prescalern usw. kann das variieren, und 100% genau 
ist es nie. Im Beispiel wird gerechnet:
Iterationen = (Takte - 29) / 8
Der Code wird aus dem RAM ausgeführt um Flash-Caches zu umgehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.