Forum: Compiler & IDEs ARM AT91SAM7X USART IRQ Prob


von Florian R. (floechen)


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:
1
__ramfunc void uart0handler (void){
2
  
3
    AT91F_US_PutChar(pUSART, 'R');
4
    pUSART->US_CR = AT91C_US_RSTSTA;  
5
}
6
7
void uart0_init (void) {                   /* Initialize Serial Interface */
8
  //volatile AT91S_AIC * pAIC = AT91C_BASE_AIC;
9
  /* mt: n.b: uart0 clock must be enabled to use it */
10
11
    *AT91C_PIOA_PDR = AT91C_PA0_RXD0 |        /* Enable RxD0 Pin */
12
                    AT91C_PA1_TXD0;         /* Enalbe TxD0 Pin */
13
14
    pUSART->US_CR = AT91C_US_RSTRX |          /* Reset Receiver      */
15
                  AT91C_US_RSTTX |          /* Reset Transmitter   */
16
                  AT91C_US_RXDIS |          /* Receiver Disable    */
17
                  AT91C_US_TXDIS;           /* Transmitter Disable */
18
19
    pUSART->US_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode */
20
                  AT91C_US_CLKS_CLOCK    |  /* Clock = MCK */
21
                  AT91C_US_CHRL_8_BITS   |  /* 8-bit Data  */
22
                  AT91C_US_PAR_NONE      |  /* No Parity   */
23
                  AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit  */
24
25
    pUSART->US_BRGR = BRD;                    /* Baud Rate Divisor */
26
27
    pUSART->US_CR = AT91C_US_RXEN  |          /* Receiver Enable     */
28
                  AT91C_US_TXEN;            /* Transmitter Enable  */
29
    
30
    AT91F_US_EnableIt(pUSART,AT91C_US_FRAME | AT91C_US_RXRDY | AT91C_US_OVRE);
31
    AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_US0, 7, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, uart0handler);
32
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
33
 
34
    AT91F_US_PutChar(pUSART, 'I');
35
}

Danke mal im vorraus

MFG Florian

von Christophe T. (chrisjt)


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

von Michael (Gast)


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

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
Noch kein Account? Hier anmelden.