Timer Interrupt Atmel SAM G53N

Gast #4496522
Hallo,

ich habe ein Problem mit dem Timer Interrupt auf einem SAM G53N.

Ich will beim Wert in RA einen Interrupt auslösen.
Der Timer läuft Ordnungsgemäß, das habe ich getestet.

Nur der Interrupt funktioniert nicht richtig.
Er wird viel zu oft aufgerufen, und scheinbar auch willkürlich.
Habe deshalb mal geschaut bei welchen Werten die ISR ausgerufen wird. 
Diese sind immer unterschiedlich.

Auf dem Oszi sehe ich ca. 260khz.

Ich finde das Problem nicht.
1
uint32_t aktuellerwert = 0;
2
uint32_t ra, rc; // PWM
3
uint8_t wt = 0;
4

5
int main (void)
6
{
7
  sysclk_init();  // 48Mhz einstellen
8
  wdt_disable(WDT);  // Watchdog ausschalten
9
  SystemCoreClockUpdate();  // Systemclock akualisieren
10
  pmc_enable_periph_clk(ID_PIOA);                                  
11
  pio_set_output   (   PIOA, SERVO_A1 | SERVO_A2 | SERVO_B1 | SERVO_B2 | SERVO_C1 | SERVO_C2 ,LOW,DISABLE,DISABLE);
12

13
// TIMER          
14
  NVIC_EnableIRQ(TC0_IRQn);
15
    
16
  sysclk_enable_peripheral_clock(ID_TC0);      
17
  tc_init(TC, 0,
18
  TC_CMR_TCCLKS_TIMER_CLOCK1    // Waveform Clock Selection
19
  | TC_CMR_WAVE          // Waveform mode
20
  | TC_CMR_WAVSEL_UP_RC      // Bei RC zurücksetzen
21
  );
22
    
23
  rc = (SystemCoreClock /2 /10000);  // 10khz 
24
  tc_write_rc(TC, 0, rc);        // RC einstellen
25
  ra = (rc / 2);            // 50%
26
  tc_write_ra(TC, 0, ra);        // RA einstellen
27
    
28
  TC->TC_CHANNEL[0].TC_IER = TC_IER_CPAS;
29
  tc_start(TC, 0);
30
  
31
  
32
  while(1)
33
  {
34
     wt++;
35
  }   
36
}
37

38
void TC0_Handler()  
39
{
40
  pio_toggle_pin_group(PIOA, SERVO_A2);
41
  aktuellerwert = TC->TC_CHANNEL[0].TC_CV ;
42
}
Gast
Jetzt funktioniert es seltsamerweise...

Ich wollte schauen welche Bits im Statusregister gesetzt sind, wenn der 
Handler aufgerufen wird. Wenn ich die darin abfrage funktioniert es auf 
einmal richtig.
1
void TC0_Handler()
2
{
3
  pio_toggle_pin_group(PIOA, SERVO_A2);
4
  aktuellerwert = TC->TC_CHANNEL[0].TC_CV ;
5
  test = TC->TC_CHANNEL[0].TC_SR;
6
}

Ich kann mir das nichts erklären.
Nichts wurde geändert ausser dieser Zeile.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.