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

Gast #6138398
Lesenswert?
• ▲
▼
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 #6138413
Lesenswert?
• ▲
▼
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 #6138438
Lesenswert?
• ▲
▼
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

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.

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.