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
Siegfried S. schrieb: > Ist das so richtig? Ja, vermutlich weil Dein Programm es so will. Mehr können wir Dir nur nach Einblick in den Source Code sagen. Sowas passiert gerne wenn der Interrupt Handler zu "lang" ist.
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.