| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /*
- * Copyright (c) 2006-2025, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2025-08-20 kurisaw First version
- */
- #include <rtthread.h>
- #include <rthw.h>
- #include <hal_data.h>
- #if defined(RT_USING_CONSOLE) && defined(RT_USING_SEMAPHORE)
- struct rt_semaphore console_sem;
- #if defined(RT_NANO_CONSOLE_UART0)
- #define renesas_uart_ctrl g_uart0_ctrl
- #define renesas_uart_cfg g_uart0_cfg
- #define renesas_uart_callback user_uart0_callback
- #elif defined(RT_NANO_CONSOLE_UART1)
- #define renesas_uart_ctrl g_uart1_ctrl
- #define renesas_uart_cfg g_uart1_cfg
- #define renesas_uart_callback user_uart1_callback
- #elif defined(RT_NANO_CONSOLE_UART2)
- #define renesas_uart_ctrl g_uart2_ctrl
- #define renesas_uart_cfg g_uart2_cfg
- #define renesas_uart_callback user_uart2_callback
- #elif defined(RT_NANO_CONSOLE_UART3)
- #define renesas_uart_ctrl g_uart3_ctrl
- #define renesas_uart_cfg g_uart3_cfg
- #define renesas_uart_callback user_uart3_callback
- #elif defined(RT_NANO_CONSOLE_UART4)
- #define renesas_uart_ctrl g_uart4_ctrl
- #define renesas_uart_cfg g_uart4_cfg
- #define renesas_uart_callback user_uart4_callback
- #elif defined(RT_NANO_CONSOLE_UART5)
- #define renesas_uart_ctrl g_uart5_ctrl
- #define renesas_uart_cfg g_uart5_cfg
- #define renesas_uart_callback user_uart5_callback
- #elif defined(RT_NANO_CONSOLE_UART6)
- #define renesas_uart_ctrl g_uart6_ctrl
- #define renesas_uart_cfg g_uart6_cfg
- #define renesas_uart_callback user_uart6_callback
- #elif defined(RT_NANO_CONSOLE_UART7)
- #define renesas_uart_ctrl g_uart7_ctrl
- #define renesas_uart_cfg g_uart7_cfg
- #define renesas_uart_callback user_uart7_callback
- #elif defined(RT_NANO_CONSOLE_UART8)
- #define renesas_uart_ctrl g_uart8_ctrl
- #define renesas_uart_cfg g_uart8_cfg
- #define renesas_uart_callback user_uart8_callback
- #elif defined(RT_NANO_CONSOLE_UART9)
- #define renesas_uart_ctrl g_uart9_ctrl
- #define renesas_uart_cfg g_uart9_cfg
- #define renesas_uart_callback user_uart9_callback
- #endif
- void rt_hw_console_init(void)
- {
- fsp_err_t err = FSP_SUCCESS;
- rt_err_t res = RT_EOK;
- res = rt_sem_init(&console_sem, "console", 0, RT_IPC_FLAG_FIFO);
- RT_ASSERT(res == RT_EOK);
- /* Initialize UART using FSP */
- #ifdef SOC_SERIES_R7FA8M85
- err = R_SCI_B_UART_Open(&renesas_uart_ctrl, &renesas_uart_cfg);
- #else
- err = R_SCI_UART_Open(&renesas_uart_ctrl, &renesas_uart_cfg);
- #endif
- if (FSP_SUCCESS != err)
- {
- while (1); /* Trap on failure */
- }
- return;
- }
- void console_send_byte(uint8_t ch)
- {
- renesas_uart_ctrl.p_reg->TDR = ch;
- #if defined(SOC_SERIES_R7FA8M85) || defined(SOC_SERIES_R9A07G0)
- while ((renesas_uart_ctrl.p_reg->CSR_b.TEND) == 0);
- #else
- while ((renesas_uart_ctrl.p_reg->SSR_b.TEND) == 0);
- #endif
- }
- void rt_hw_console_output(const char *str)
- {
- rt_size_t i = 0, size = 0;
- char a = '\r';
- size = rt_strlen(str);
- for (i = 0; i < size; i++)
- {
- if (*(str + i) == '\n')
- {
- console_send_byte((uint8_t) a);
- }
- console_send_byte(*(str + i));
- }
- }
- void renesas_uart_callback(uart_callback_args_t *p_args)
- {
- /* Handle the UART event */
- switch (p_args->event)
- {
- /* Received a character or receive completed */
- case UART_EVENT_RX_CHAR:
- case UART_EVENT_RX_COMPLETE:
- rt_sem_release(&console_sem);
- break;
- default:
- break;
- }
- }
- char rt_hw_console_getchar(void)
- {
- int ch = -1;
- rt_sem_take(&console_sem, RT_WAITING_FOREVER);
- #ifdef SOC_SERIES_R7FA8M85
- fsp_err_t ret = R_SCI_B_UART_Read(&renesas_uart_ctrl, (uint8_t *)&ch, 1);
- #else
- fsp_err_t ret = R_SCI_UART_Read(&renesas_uart_ctrl, (uint8_t *)&ch, 1);
- #endif
- if(ret != FSP_SUCCESS)
- {
- ch = -1;
- rt_thread_mdelay(10);
- }
- return ch;
- }
- #endif
|