Hallo zusammen,
ich habe hier seit 2 Tagen ein Problemchen, das mich mittlerweile
verzweifeln lässt:
Ich möchte an die RX-Leitung des Uart 0 am ARM ein Gerät hängen, das mir
in unregelmäßigen Abständen Daten an den ARM schickt.
Das Lesen von RX soll über einen UART-Interrupt getriggert werden. Ich
initialisiere diesen wie folgt:
1 | //Config IOs
|
2 | AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, AT91C_PA05_RXD0 );
|
3 |
|
4 | // enable clock of USART
|
5 | AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, 1<<AT91C_ID_US1 ) ;
|
6 |
|
7 | uart.rdPos = 0;
|
8 | /* Disable the DMA */
|
9 | AT91F_PDC_DisableRx( AT91C_BASE_PDC_US0 ); //Disable the DMA
|
10 |
|
11 | /* Reset transmitter and receiver */
|
12 | AT91C_BASE_US0->US_CR = AT91C_US_RSTRX; //rx and tx are then disabled
|
13 |
|
14 | // config USART
|
15 | AT91F_US_Configure( AT91C_BASE_US0, MCK, mode, baud_rate, 0 );
|
16 |
|
17 | // enable rx
|
18 | AT91C_BASE_US1->US_CR = AT91C_US_RXEN;
|
19 |
|
20 | AT91F_PDC_DisableRx( AT91C_BASE_PDC_US1 ); //Disable the DMA for receive
|
21 |
|
22 | /* Set DMA Rx buffer*/
|
23 | AT91C_BASE_US0->US_RPR = (uint)uart.rxBuf;
|
24 | AT91C_BASE_US0->US_RCR = sizeof(uart.rxBuf);
|
25 | AT91C_BASE_US0->US_RNPR = (uint)uart.rxBuf;
|
26 | AT91C_BASE_US0->US_RNCR = 0;
|
27 |
|
28 | AT91F_PDC_EnableRx( AT91C_BASE_PDC_US0 ); //Enable the DMA for receive
|
29 |
|
30 | AT91F_AIC_ConfigureIt( AT91C_BASE_AIC, AT91C_ID_US0, IRQ_PRIORITY_PIO, AT91C_AIC_SRCTYPE_INT_LOW_LEVEL, isrUART );
|
31 |
|
32 | //Enable IRQ on US0
|
33 | AT91C_BASE_US0->US_IER = AT91C_US_RXRDY;
|
34 | AT91F_AIC_EnableIt( AT91C_BASE_AIC, AT91C_ID_US0 );
|
Leider funktioniert die Sache nicht so recht --> Unknown Instruction,
oder watchdog.
Kann mir jemand sagen, wo der Fehler zu suchen ist?