ATSAMD10D14 - Timer/Interrupt

OP #7443121
Lesenswert?
• ▲
▼

Moin,

ich habe bisher nur mit AVR 8-Bittern gearbeitet und bin in diesen auch sehr gut unterwegs. (Datenblätter sind schon ins Gehirn gebrannt)

Nun ist bei der Arbeit aktuell ein bisschen Luft und ich habe mir einen ATSAMD10D14am gekauft und erstmal auf ein kleines PCB aufgebracht. Das umstellen des Takts auf interne 48MHz und togglen eines Kanals klappt auch schon.

Mir fällt es allerdings ziemlich schwer, Beispiel Code zu finden, so auch beim Timer Kapitel.

Die Unterlagen bei Microchip z.B.:

https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42256-SAM-Timer-Counter-for-Control-Applications-TCC-Driver_ApplicationNote_AT07058.pdf

Gelten bei den Examples dann nicht für den D10 sondern nur für die D21. Die genutzen Structs/Enum etc. sind obsolet.

Suche ich falsch oder ist es einfach schwierig für D10 etwas zur Anwendung zu finden?

Ich möchte als nächstes einen Timer laufen lassen und im Millisekundentakt einen Interrupt auslösen.

Ich wäre froh, wenn jemand von euch einen Tipp zu Application Notes hat, die auch wirklich für den D10 gedacht sind oder andere Quellen wo es um den Timer geht.

Gruß Hannes

#7443222
Lesenswert?
• ▲
▼

Man findet da relativ wenig.

Ich habe bei dem immer das ASF3 benutzt und dazu das Datasheet mit den Registern und man bekommt das schon zum laufen.

Mit ASF funktioniert Peripherie in Betrieb nehmen immer recht gleich. Standardwerte in ein Struct -> Parameter verändern -> Init aufrufen -> Peripherie aktivieren -> eventuell ISR starten.

Ich hab leider gerade keinen Code für deine Anwendung. Hiermit aber rufe ich nach einer Zeit die ISR auf. Die läuft aber nur 1 mal ab. Allerdings sollte es recht einfach sein die umzubauen. Es wird vom ASF dies benutzt: https://asf.microchip.com/docs/latest/samd10/html/group__asfdoc__sam0__tc__group.html

Benutzt wird TC1 nicht TCC aber ich meine TCC war ähnlich kann aber bisschen mehr.

1
  
2
// Init
3
        struct tc_module tc_instance;
4
  struct tc_config config_tc;
5
  tc_get_config_defaults(&config_tc);
6
  config_tc.clock_source = GCLK_GENERATOR_0;
7
  config_tc.clock_prescaler = TC_CLOCK_PRESCALER_DIV1;
8
  config_tc.counter_size    = TC_COUNTER_SIZE_16BIT;
9
  config_tc.wave_generation = TC_CTRLA_WAVEGEN_MFRQ;
10
  config_tc.counter_16_bit.compare_capture_channel[0] =((48000000UL/1000000UL)*100); // 100us
11
  config_tc.oneshot = 1;
12
  tc_init(&tc_instance, TC1, &config_tc);
13
  TC1->COUNT16.INTENSET.bit.OVF = 1; // Overflow Interrupt aktivieren
14
  system_interrupt_enable(TC1_IRQn);
15
  tc_enable(&tc_instance);
16

17
// Interrupt
18
void TC1_Handler(void){
19

20
// Code
21
  return;
22
}

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.