PIC32MX795F512L UART Receive

OP (Firma: Privat) #5399705
Lesenswert?

Hallo,

PIC32MX795F512L
MPLAB 8.92
C32 Compiler

Habe zu dem µC vier UART Verbindungen.
Alle arbeiten mit 512.000 Baud.
Receive und Transmit sind Interrupt gesteuert.
VectorPriority = 2  und VectorSubPriority = 0

Problem:
Wenn auf dem ersten UART Daten reinkommen, und fast Zeitgleich auch auf 
dem zweiten, wird für diese Zeit die eingehende Daten vom ersten UART 
ignoriert.

Ist das so richtig?

siehe Anhang.

Schöne Zeit
Angehängte Dateien:
OP (Firma: Privat) #5399800
Lesenswert?

gerne.

1
void __ISR(_UART_3_VECTOR, ipl2) IntUART3Handler(void)
2
{
3
BYTE RxData;
4

5
// Receive
6
    if ( (U3STAbits.OERR == 0) && (U3STAbits.PERR == 0) && (U3STAbits.FERR == 0) )
7
    {
8

9
      if ( (IEC1bits.U3RXIE == 1) && (IFS1bits.U3RXIF == 1) )
10
      {
11
      RxData = (BYTE)U3RXREG;
12
      IFS1bits.U3RXIF = 0;
13
TP_uC5_23 = 1;
14
      UartTickCnt[UART_INDEX_3] = 0;
15
      TickIsrStatus &=~ ISR_BIT_UART_03;
16
        if (RX_Cnt[UART_INDEX_3] < RS485_RX_BYTE_BUFFERSIZE_CH3)
17
        {
18
        UartRxBuffer_CH3.byte.mem[RX_Cnt[UART_INDEX_3]++] = RxData;
19
        TickISR |= ISR_BIT_UART_03;
20
         }
21
TP_uC5_23 = 0;
22
      }
23

24
     }
25
     else
26
     {
27
        if (U3STAbits.OERR == 1)
28
        {
29
TP_uC5_22 ^= 1;
30
         }
31
        if (U3STAbits.PERR == 1)
32
        {
33
         }
34
        if (U3STAbits.FERR == 1)
35
        {
36
         }
37
    RX_Error[UART_INDEX_3][RECEIVE_ERROR_ISR_UART]++;
38
    UART_RX_DATA[UART_INDEX_3] = (BYTE)U3RXREG;
39
    UartTickCnt[UART_INDEX_3] = 0;
40
    TickISR &=~ ISR_BIT_UART_03;
41
    TickIsrStatus &=~ ISR_BIT_UART_03;
42
    RX_Cnt[UART_INDEX_3] = 0;
43
    U3STAbits.OERR = 0;  
44
    U3STAbits.PERR = 0;  
45
    U3STAbits.FERR = 0;
46
    IFS1bits.U3RXIF = 0;
47
      }
48

49
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren