PIC18f47q10
Pretpostavljam da ne stigne da izčita RCREG te da setuje OERR. Fukcija koju generiše Kod konfigurator "ima" generisnau rutinu za resetovane Eusarta koja to "ne radi". Za probu sam reset Eusart-a prebacio u INT0 rutinu i nakon toga nisam primetio da zaglavljuje .
Code:
void EUSART1_RxDataHandler(void){
/*================================================================================================================================
* Moj kod
==================================================================================================================================*/
kontrola.test = RC1REG; // upis primljenog bjata
flag.usart = 1; // omogucava za u glavnoj rutini upisujemo registre primljenog bajta
/*===================================================================================================================================
===================================================================================================================================*/
// use this default receive interrupt handler code
eusart1RxBuffer[eusart1RxHead++] = RC1REG;
if(sizeof(eusart1RxBuffer) <= eusart1RxHead)
{
eusart1RxHead = 0;
}
eusart1RxCount++;
}
void EUSART1_DefaultFramingErrorHandler(void){}
void EUSART1_DefaultOverrunErrorHandler(void){
// EUSART1 error - restart
RC1STAbits.CREN = 0;
RC1STAbits.CREN = 1;
}
Code:
void __interrupt() INTERRUPT_InterruptManagerHigh(void) {
// interrupt handler
if (PIE0bits.INT0IE == 1 && PIR0bits.INT0IF == 1) // INT0
{
//********************** moj kod ********************************************************
flag.p = 1; //
brojac_pu++;
brojac_po++;
brojac_tt++;
pom++;
if (pom >= 3) {// citamo tek kad se desi n interapta
total_timer_TMR1 = TMR1_ReadTimer(); /* citamo stanje tajmera */
TMR1_WriteTimer(0); /* nakon citanja vracamo ga na nulu */
pom_brojac_int = broj_interapata_TMR1; //
broj_interapata_TMR1 = 0;
pom = 0;
}
if (RC1STAbits.OERR) { // naknadno ubačeno
RC1STAbits.CREN = 0;
RC1STAbits.CREN = 1;
}
//*******************************************************************************************
INT0_ISR();
}