Hello Everyone,
I have implemented FREERTOS CLI using uart on RA4m2. actually i am able to trasnmit using uart interface but unable to receive any command using uart.
I am facing to generate RX interrupt . here is my source code for uart call back function. It is an event based application using thready queue .
Now the same source code using same call back function is working on RA6M3 controller but not on RA4M2.
do i need to specify something
void cli_dbgUartCallback(uart_callback_args_t *p_args) { Event_t event = { .id = EV_NO_EVENT, .payload.u32Arr[0] = 0 }; m_dbgUartEvent = p_args->event; if ((UART_EVENT_RX_CHAR == m_dbgUartEvent) && (m_cmdInProgress == false)) { if (m_bufferIndex < (CMD_BUFFER_SIZE - 1)) { switch (p_args->data) { /* If Enter is pressed by user, send event to process the data */ case '\r': { /* Send command received event */ event.id = EV_DBG_UART_CMD_RCVD; event.payload.u32Arr[0] = (uint32_t)&m_cmdBuffer[0]; evh_handleEvent(&event); /* Set command in progress flag */ m_cmdInProgress = true; /* Clear buffer index */ m_bufferIndex = 0; break; } case '\b': { /* Backspace was pressed. Erase the last character in * the input buffer */ if (m_bufferIndex > 0) { m_bufferIndex--; m_cmdBuffer[m_bufferIndex] = '\0'; } break; } case '\n': /* ignore \n escape */ break; default: { /* Write RX data to input buffer */ m_cmdBuffer[m_bufferIndex++] = (char) p_args->data; break; } } } else { /* Buffer overflow! */ m_bufferIndex = 0; } } }
Hello,
Thanks for reaching out to Renesas Engineering Community.
Have you confirmed that data are transferred to P410 pin ?
Do you mean that the 'p_args->event' value is never equal to 'UART_EVENT_RX_CHAR' ?
Regards
hi AZ-Renesas,
how can i confirm that data are transferred to P410 pin ?.
i am able to transmit data on serail tera term port. so i thought serail interface is fine.
only the RX interrput is not at all firing.
confusing part is this that same code is working on RA6M3 evluation kit.
Regards,
Can you share some of your SCI-UART related code ?
/** * Initializes the debug UART driver * * @retval FSP_SUCCESS Initialization successful * @retval FSP_ERR_* Any error during initialization */ fsp_err_t dbgUart_init(void) { fsp_err_t err = FSP_SUCCESS; /* Initialize UART */ err = R_SCI_UART_Open(&g_uartDbg_ctrl, &g_uartDbg_cfg); return err; } /** * Writes data to the UART interface * * @param[in] pBuffer Buffer containing the data to write * @param[in] numBytes Number of bytes to write * * @retval FSP_SUCCESS Write successful * @retval FSP_ERR_* Any error during write */ fsp_err_t dbgUart_write(const uint8_t *const pBuffer, size_t numBytes) { fsp_err_t err = FSP_SUCCESS; /* Write data to UART */ err = R_SCI_UART_Write(&g_uartDbg_ctrl, pBuffer, numBytes); return err; }
but any way i am using this write functions after handleling received data.
Can you pause the program and then check the register values ? They are greyed out when the program is running
This is the vlalues of my sci_uart resistor .
i do not see any problem .
If you do not see no data in RDR it means that there is no data in Receive Shift Register too, because they are transferred automatically from RSR to RDR.
But no data in RSR means that there is no serial data received from the RxD pin. Since this pin is configured correctly as shown above, it is possible that serial data do not arrive to RxD pin.
Can you make sure that that the transmitting device transmits data on P410 line ?
I have checked port config as well as interrupt resistors - seems everything all right.
do you think i might have MCU HW problem.
Is is not evaluation kit but ra4M2 custom board.
Bhavin
It is still unclear for me if any data arrive to the RxD pin. Can you make sure that they do ?
If they do, can you see check the RDR register over a period of time ?
Hi Can you tell mw how can i verify that data is coming on RxD pin ?
The simplest way would be to use a logic analyzer.
If you connect the 2 UART signals to EK-RA6M3 do you see received data ? If yes, that means the data arrive properly.
I dont have logic analyzer. is there another way ?
Do you receive data from the transmitting device with the same connections using EK-RA6M3 ?
Yes, The same program works perfectly fine on RA6m3 evalualtion kit . i recieve correct data from Hterm on Ra6M3 evalualtion kit.
when i tried to run the same program with correct pin configuration on custom RA4M2 hardware,
traansmission from MCU to Hterm works but Hterm to MCU transmission does not work. seems .
UART_EVENT_RX_CHAR event is not happening at all.
The issue is that you do not get data in RDR register. If you do not get data you will not get a receive interrupt.
Can you attach the RA4M2 project so I can take a better look ?
Hi AZ-Renesas,
I have checked the data on RxD pin and it is coming on RxD pin.
only have problem that RX interrupt is not happening. I will clean up the code and will send you later so that you can look into it.
AZ-Renesas,
I managed to get interrupt on RX.
but the control always goes into BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(0);
I have checked NMI and fault resistor but i dont see any problem in stack overflow.
can you please check this source code and tell me your opinion on it.
RA4M2_CLI.zip
This error is usually caused by not enough main stack size. Try to increase it on the BSP tab.
How did you fix the RX interrupt ? Could you share the solution so that other users can solve similar issues ?
Actually i have mulple thread based application and i have removed all the thread. first tried to run the application using single thread. it worked. do you think may there can be issue of context switching ot interrupt priority which causes RX interrupt to never arise ?
I still have the problem on my main application.
can you tell me how much i can increase the main stack size for RA4M2?
It sounds like other interrupts with higher priority did not let this interrupt to execute.
Looking at your project, the UART stack is used from the CLI thread so you should place it under the CLI thread and not in HAL/Common. Similarly for the other stacks, you need to place them under the correct thread.
Please fix this and then try with the same stack or bigger.
From the project you shared it seems that stack and heap size are big enough. Both have been set to 0x4000 which is 16 Kbytes. Have you tried to debug your code step by step, in order to check after which line control goes to BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(0)?
Best Regards,
IK