Espardino y FreeRTOS


#1

Buenos días a todos, necesito ayuda en un proyecto con espardino y Freertos; estoy usando la ISR de la UART (interrupción) dentro de FreeRTOS, he visto ejemplos sobre esto, pero no me funciona correctamente, el sistema va bien pero cuando se ejecuta la ISR de la UART, se queda bloqueado en no sé donde, he pensado en usar una task para la UART pero he querido hacerlo por interrupciones, si tenéis alguna idea o experiencia sería de gran ayuda.
Adjunto el codigo, un saludo!

#include <micro214x.h>
#include <dac.hpp>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <rtc.h>

#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/queue.h>
#include <freertos/semphr.h>

#include “serial.h”

xTaskHandle xHandleLCD,xHandleKeypad;

void vTaskScreen( void *pvParameters );;
void vTaskKeypad( void *pvParameters );

static void serial_irq_handler_UART1 (void) attribute ((interrupt(“IRQ”)));

//*******************************************************************************************************//
static void serial_irq_handler_UART1(void)
{
while (!(U1LSR & 0x01));
ReceiveBT = U1RBR;

    //Aquí envio un mensaje a la cola de mensajes que va a la tarea Screen...

VICVectAddr = 0;       // Acknowledge Interrupt

}

int main(void)
{

	IO_init(FAST_IO); // init the ports IO.
	delay_init();//
    init_serial1(9600);//Puerto serie
   

    VIC_setup_irq(UART1_INT, (void *)(serial_irq_handler_UART1));
    IRQ_enable();//Obligatorio, si no, no funciona.




    xTaskCreate( vTaskScreen, (const signed char*)"Screen", configMINIMAL_STACK_SIZE, NULL , tskIDLE_PRIORITY+1, &xHandleLCD );
   
    xTaskCreate( vTaskKeypad, (const signed char*)"Keypad", configMINIMAL_STACK_SIZE, NULL , tskIDLE_PRIORITY+1, &xHandleKeypad );


    //Cola de mensajes de datos.
    //xQueueCreate();

    //Cola de mensajes de control.



   	vTaskStartScheduler(); /* start the task scheduler, all task start now */

}