AnsweredAssumed Answered

MQX Timer loop

Question asked by elso Gasparotto on Dec 12, 2013

Hi all

I need help

I have developed a project based on a Freescale MCF52259

I used to develop Codewarrior 7.2 e MQX 3.6

 

In the project use an interrupt IRQ7, serial communication and a timer.

 

The timer triggers an interrupt every 50 ms and operates a number of variables related to the time

IRQ7 set 1 to a variable

The main when he sees the variable to 1 enables a serial communication (Interrupt mode)

 

My problem is that some time the timer interrupt go to loop.

 

This does not happen if IRQ7 and serial communication are never activated.

 

any ideas?

 

Below is the code.

 

Main()

{

MCF522XX_EPORT_STRUCT_PTR eport_reg_ptr ;

//IRQ7

eport_reg_ptr = (pointer)(&((VMCF5225_STRUCT_PTR)_PSP_GET_IPSBAR())->EPORT[0]);

_int_install_isr (MCF5225_INT_EPORT0_EPF7, (void (_CODE_PTR_))P3_IRQ7, (pointer)eport_reg_ptr);

_mcf5225_int_init(MCF5225_INT_EPORT0_EPF7, BSP_EPORT0_EPF7_INT_LEVEL, BSP_EPORT0_EPF7_INT_SUBLEVEL, TRUE)

//TIMER

_timer_create_component(TIMER_DEFAULT_TASK_PRIORITY, TIMER_STACK_SIZE);

realck = _timer_start_periodic_every((pointer)P3_realck,event_ptr,TIMER_KERNEL_TIME_MODE, 50L);

 

//COMM

MQX_FILE_PTR Seriale1 = (pointer)fopen("ittya:", NULL);

//interupt ricezione

_int_install_isr(BSP_UART0_INT_VECTOR,(pointer)P3_Read_Comm1,Seriale1);

 

 

}

void P3_Read_Comm1(uint_8 P3_HeadNow)

{

char UART_REGISTER;

vuart = (MCF52XX_UART_STRUCT_PTR)(&((VMCF5225_STRUCT_PTR)_PSP_GET_IPSBAR())->UART[0]);

//read

P3_BufferRx[ContCarRX]=vuart->READ.URB;

P3_LastChar=vuart->READ.URB;

UART_REGISTER = vuart->READ.USR;

ContCarRX++;

}

void P3_Write_Comm1(char buff[])

{

uint_32 x=0;

char temp;

P3_LastChar='!';

P3_Memcpy0(P3_BufferTx,buff);

vuart = (MCF52XX_UART_STRUCT_PTR)(&((VMCF5225_STRUCT_PTR)_PSP_GET_IPSBAR())->UART[0]);

ContCarTX=0;

ContCarRX=0;

while (1)

{

if (P3_BufferTx[ContCarTX]==0x00) break;

vuart->WRITE.UTB=P3_BufferTx[ContCarTX];

while(1)

{

temp = vuart->WRITE.UIMR && 0x01;

if (temp == 0x01) break;

}

x=0;

if (P3_BufferTx[ContCarTX]=='\n') break;

ContCarTX++;

}

}

Outcomes