Lo escribo aqui para no abrir otro post,
he descubierto por que no funcionaba la uart y saltaban unas interrupciones que no eran, resulta que las librerias estan mal, que sorpresa
resulta que al usar la funcion "usart_async_register_callback" entras en el fichero hal_usart_async.c y aquí tenemos unas definiciones de las interrupciones:
enum usart_async_callback_type { USART_ASYNC_RXC_CB, USART_ASYNC_TXC_CB, USART_ASYNC_ERROR_CB };
pero luego esta función llama a "_usart_async_register_callback" la cual usa las definiciones de otro fichero:
enum _usart_async_callback_type { USART_ASYNC_BYTE_SENT, USART_ASYNC_RX_DONE, USART_ASYNC_TX_DONE, USART_ASYNC_ERROR };
Asi que claro al no estar definida la interrupción USART_ASYNC_BYTE_SENT en el primer fichero, al intentar usarla la guardabas en el espacio de USART_ASYNC_RX_DONE y cada vez que escribias la uart saltaba la interrupción de la recepción y pisaba el buffer.
Vuelvo a recalcar que a nadie se le ocurra utilizar estos micros hasta que microchip los meta en su sistema y arregle las librerias.
De todas formas la comunicación uart no me va bien, y es por que la interrupción del timer por lo visto tiene mas prioridad y hace que se corrompan los mensajes.
¿
Alguien sabe como dar mas prioridad a la interrupción de la uart? no veo nada en las librerías para ajustar el orden de prioridades y en la hoja de datos tampoco solo dice:
See “Interrupt Priority Registers” in the relevant ARM documentation.
De verdad me quedo asombrado de lo mal que esta esto, es increíble.