www.mikrocontroller.net

Forum: Compiler & IDEs ARM AT91SAM7X USART IRQ Prob


Autor: Florian R. (floechen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe angefangen von AVR / HCS12 auf ARM uzusteigen, allerdings 
bleibe ich an er Interrupt Ecke hängen. Ich versuche nun schon seit 
längerem die Interrupts für die USART hin zu bekommen, allerdings 
parriert nüx.
Hat jemand eine idee was ich falsch mache? Ich habe auch ein Warning von 
wegen Incompatible Pointer Type bei AT91F_AIC_ConfigureIt, habe dann den 
code nochmals mit einem sample verglichen und nix gefunden.

Nu ja, hier mal der ausschnitt aus dem src:
__ramfunc void uart0handler (void){
  
    AT91F_US_PutChar(pUSART, 'R');
    pUSART->US_CR = AT91C_US_RSTSTA;  
}

void uart0_init (void) {                   /* Initialize Serial Interface */
  //volatile AT91S_AIC * pAIC = AT91C_BASE_AIC;
  /* mt: n.b: uart0 clock must be enabled to use it */

    *AT91C_PIOA_PDR = AT91C_PA0_RXD0 |        /* Enable RxD0 Pin */
                    AT91C_PA1_TXD0;         /* Enalbe TxD0 Pin */

    pUSART->US_CR = AT91C_US_RSTRX |          /* Reset Receiver      */
                  AT91C_US_RSTTX |          /* Reset Transmitter   */
                  AT91C_US_RXDIS |          /* Receiver Disable    */
                  AT91C_US_TXDIS;           /* Transmitter Disable */

    pUSART->US_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode */
                  AT91C_US_CLKS_CLOCK    |  /* Clock = MCK */
                  AT91C_US_CHRL_8_BITS   |  /* 8-bit Data  */
                  AT91C_US_PAR_NONE      |  /* No Parity   */
                  AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit  */

    pUSART->US_BRGR = BRD;                    /* Baud Rate Divisor */

    pUSART->US_CR = AT91C_US_RXEN  |          /* Receiver Enable     */
                  AT91C_US_TXEN;            /* Transmitter Enable  */
    
    AT91F_US_EnableIt(pUSART,AT91C_US_FRAME | AT91C_US_RXRDY | AT91C_US_OVRE);
    AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_US0, 7, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, uart0handler);
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
 
    AT91F_US_PutChar(pUSART, 'I');
}

Danke mal im vorraus

MFG Florian

Autor: Christophe Thil (chrisjt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mh, ja, das kenne ich :)

Bei mir lag es daran, dass die Interrupts im Prozessor-Core noch nicht 
aktiviert waren (Register CPSR setzen). Den AIC alleine zu aktivieren 
reicht noch nicht aus!

Btw, da ich gerade sehe dass Du mit einem X arbeitest: Läuft der 
Controller bei dir mit dem richtigen Takt? (s. 
Beitrag "Taktprobleme AT91SAM7X" )

Grüße,
Christophe

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe ebenfalls das angesprochene Problem bei meinem SAM7X256 mit dem 
Timer! Auf die Lösung muss man erst auch einmal kommen...

Aber, wie setze ich das CPSR Register richtig?! Bei mir kommt nur 
Schwachsinn raus ;-) Vl. kann mir dies ja jemand kurz näher bringen!

LG
Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.