Estou utilizando o PIC18F2331 e o C18. O oscilador é de 10MHz com PLL setado, resultando em 40MHz.
void configura_usart(void){
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 64); //Baud Rate: 38400
//Fórmula para cálculo de SPBRG = ((FOSC/Baud Rate)/64)-1
return;
}
void configura_interrupt(void){
INTCONbits.GIE = 1; //hatilitação geral das interrupções
INTCONbits.PEIE = 1; //habilitação dos periféricos
return;
}
void rx_handler(void){
char c1;
c1 = ReadUSART();
putcUSART(c1);
PORTB = ~PORTB;
PIR1bits.RCIF = 0;
return;
}
só para teste, fiz este espelho, todo dado recebido é enviado novamente.
porém do jeito que está na função rx_handler(void), só funciona com o primeiro byte recebido, e não recebe mais dado nenhum...
só funciona se eu habilitar novamente as interrupções através de
INTCONbits.GIE = 1;
dentro da função rx_handler....
isso é normal? ter que habilitar as interrupções globais toda vez que entrar na interrupção do RX??
muito obrigado!
Bruno