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.