De forma breve, estou me iniciando em projetos com os uC's pic24f e estou tendo um pouco de dificuldade na parte da serial, rs.
Criei um aplicativo em visual c++ que envia um protocolo de bytes para o uC, como estou trabalhando com interrupção de RX, fica fácil tratar os bytes que estou recebendo, no entanto estou notando que isto esta atrapalhando processamento de outras interrupções, como a de multiplexação de displays, SPI, e etc...
Estou dando para a porta serial baixa preferencia na interrupção... as preferencias na hora de tratar a interrupção são enumeradas, se me lembro bem rs, de 0 a 7. Sendo 0 a de menor preferencia e 7 a de maior preferencia.
Portanto
- Código: Selecionar todos
_U1RXIP = 4; preferencia da int rx
_T5IP = 5; preferencia da int timer 5
_INT1IP = 6; preferencia da int int1 para bit banging
Estou tratando o protocolo que recebo de forma simples, não sei o erro esta nele rs.
- Código: Selecionar todos
void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void)
{
protocolo[auxiliar_protocolo] = recebe_byte_UART1();
if(auxiliar_protocolo == 20) /* se vetor protocolo estiver cheio */
{
if( protocolo[0] == 0xAA && protocolo[1] == 0x01 && protocolo[19] == 0xAA ) /* se for protocolo de atualização de dados */
{
/* faz oque tem que fazer */
_U1RXIF = 0; /* Limpa flag */
}
else if( protocolo[0] == 0xAA /* se for protocolo de request de dados */
&& protocolo[1] == 0x03
&& protocolo[3] == 0xAA)
{
/* faz oque tem que fazer */
_U1RXIF = 0; /* Limpa flag */
}
else
{
for(auxiliar_protocolo = 0; auxiliar_protocolo <= 20; auxiliar_protocolo++) /*limpa vetor reseta auxiliar_protocolo*/
{ protocolo[auxiliar_protocolo] = 0; }
auxiliar_protocolo = 0;
_U1RXIF = 0; /* Limpa flag */
}
}
else
{
auxiliar_protocolo++;
}
_U1RXIF = 0; /* Limpa flag */
}
Lendo no forum da microchip o manual de referencias do uC vi algumas coisas sobre limpar um bit de over run OERR mas ainda não estou muito esclarecido de seu funcionamento rs.
Desde já agradeço pela atenção
