Interrupt od odeslání znaku přes UART-program se zacyklí

Ahoj, začínám s MCU PIC32MX695F512H a mám problém s interaptem při odeslání znaku. Při debagingu jsem zjistil, že přerušení se vykoná, ale jakoby se mi program zacyklí ve funkci pro jeho obsluhu. To samé mi dělal i interapt od příjmu sériového znaku, ale vyřešil jsem to přečtením stavu a snulováním jeho flagu. Nevěděl by někdo proč mi ten stejný přístup nefunguje i u odesílání? Dík…posílám zdrojový kód

UARTConfigure(UART2, UART_ENABLE_PINS_TX_RX_ONLY);
UARTSetLineControl(UART2, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1);
UARTSetDataRate(UART2, GetPeripheralClock(), DESIRED_BAUDRATE);
UARTEnable(UART2, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));

// Configure UART2 RX Interrupt
INTEnable(INT_U2RX, INT_ENABLED);
INTSetVectorPriority(INT_VECTOR_UART(UART2), INT_PRIORITY_LEVEL_6);
INTSetVectorSubPriority(INT_VECTOR_UART(UART2), INT_SUB_PRIORITY_LEVEL_0);

INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR); // configure for multi-vectored mode
INTEnableInterrupts(); // enable interrupts

void __ISR(_UART_2_VECTOR, IPL6SOFT) IntUart2Handler(){
if(mU2RXGetIntFlag()){
unsigned char znak = ReadUART2();
mU2RXClearIntFlag();
}
else{
if(mU2TXGetIntFlag()){
//zde by asi mela byt nejaka obsluha…
mU2TXClearIntFlag();
}
}
}

:arrow_right: administrator: přejmenováno z "Interapt od odeslání znaku přes UART"

Když tak pozoruju ty odpovědi, které nepřicházejí napadá mě, jestli je ten dotaz úplně mimo mísu nebo jen nikdo nezná důvod…njn zas budu mít další den strávenej nad nejspíš jednoduchou věcí

Jestli to nebude tím že s PIC32 tu nikdo nedělá?

To mě taky napadlo, ale spíš jsem si říkal, že jsem lama…to každopádně sem :smiley:

Ahoj, taky pracuji s PIC 32, a podle toho co píšeš bude problém v tom že se opakovaně vyvolává přerušení od UART - TX.
Po nastavení UART a povolení přerušení dojde k nastavení flag bitu UxTXIF a vyvolá se přerušení, protože UxTXREG je prázdný. V obsluze přerušení musíš naplnit UxTXREG daty k odeslání a pak vymazat flag. Pokud pouze vymažeš flag a nevložíš žádná data, tak dojde opětovně k nastavení flagu a vyvolání přerušení.
Přečti si referenční manuál k UART modulu, tam je to podrobně popsáno.
ww1.microchip.com/downloads/en/DeviceDoc/61107G.pdf

Díky za odpověď. Povedlo se mi to již vyřešit ale příjde mi to jako dost nelogický. Jsem totiž podle jednoho člověka postižen atmélozou tak mi všechno u microchipu dýl trvá :slight_smile: