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
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 | } |
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.