Hi everyone. I've got a problem using the UART irq_Handler.
I'm working with an STM32E ev board and i want to receive data from an AHRS throught the COM port. I've to manage a message of many bytes and i need to use an UART interrupt handler to pass charater to a task that will collect all the bytes of the mesage and then, when complete, send it to another task. The problem is that i never get into the UART IRQ_Handler routine and i cannot understand why.
Here is the code:
/*----- Usart Interrupt Service routine----- */ void USART2_IRQHandler(void) { char *char_ptr; char char_rec; _init_box(charpool,sizeof(charpool),sizeof(U32)); while(1){ os_mbx_init(MsgBoxA,sizeof(MsgBoxA)); char_ptr = _alloc_box(charpool); char_rec = getkey(); char_ptr = &char_rec; os_mbx_send(MsgBoxA,char_ptr,0xffff); GLCD_displayStringLn(Line4, " Get some "); } } /*---------------------------------------------------------------------------- * Task getAhrs: receive the character, then switch the state of the machine and collect the * payload character in a buffer to send to the manage task *---------------------------------------------------------------------------*/ __task void getAhrs(void){ char *car_rec; U32 *buf_ptr; os_mbx_init(MsgBoxB,sizeof(MsgBoxB)); /*init the mailbox B */ GLCD_displayStringLn(Line3, "In the task get"); while(1){ switch (buf_count){ case 0: buf_ptr = _alloc_box(bufpool_0); /*memory allocation */ break; case 1: buf_ptr = _alloc_box(bufpool_1); break; case 2: buf_ptr = _alloc_box(bufpool_2); break; } os_mbx_wait(MsgBoxA,(void**)&car_rec,0xffff); /*receive the mailbox from the IRQ_hanlder*/ current_char = *car_rec;
The code then goes on managing the character and colecting it into a buffer pointed by buf_ptr.
When I ebug it I get o errors, but, using the breakpoints i can see that it never step into the IRQ_Hanler.
A clarification:
I set up the UART in the starter task that is as follow:
/*---------------------------------------------------------------------------- * Task starter: init and configure the UART and create all the tasks *---------------------------------------------------------------------------*/ __task void starter (void){ USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx; /* Configure USART2 */ USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* enable usart2 receive interrupt*/ USART_Cmd(USART2, ENABLE); state = IDLE; /*state machine in IDLE state */ _init_box(mpool,sizeof(mpool),sizeof(U32)); /*mailboxes memory spaces */ _init_box(bufpool_0,sizeof(bufpool_0),sizeof(U32)); _init_box(bufpool_1,sizeof(bufpool_1),sizeof(U32)); _init_box(bufpool_2,sizeof(bufpool_2),sizeof(U32)); GLCD_setBackColor(Green); GLCD_setTextColor(Red); os_tsk_create(printLCD,1); os_tsk_create(manageAhrs,2); os_tsk_create(getAhrs,3); os_tsk_delete_self(); }
If anyone coul explain me where i wrong... i've also tried to look at some eamples but also them did not work.. It's a problem of my board or maybe i don't set something very important? Thanks