@@ -211,7 +211,17 @@ static rt_err_t ra_uart_configure(struct rt_serial_device *serial, struct serial
211211 uart = rt_container_of (serial , struct ra_uart , serial );
212212 RT_ASSERT (uart != RT_NULL );
213213
214- #if defined(SOC_SERIES_R7FA8M85 ) || defined(SOC_SERIES_R7KA8P1 )
214+ #if defined(SOC_SERIES_R7SA6W1 )
215+ uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t * )uart -> config -> p_cfg -> p_extend ;
216+ RT_ASSERT (p_extend != RT_NULL );
217+ RT_ASSERT (p_extend -> p_baud_setting != RT_NULL );
218+
219+ err = R_UART_W_BaudCalculate (cfg -> baud_rate , p_extend -> p_baud_setting );
220+ if (FSP_SUCCESS == err )
221+ {
222+ err = R_UART_W_Open (uart -> config -> p_api_ctrl , uart -> config -> p_cfg );
223+ }
224+ #elif defined(SOC_SERIES_R7FA8M85 ) || defined(SOC_SERIES_R7KA8P1 )
215225 err = R_SCI_B_UART_Open (uart -> config -> p_api_ctrl , uart -> config -> p_cfg );
216226#else
217227 err = R_SCI_UART_Open (uart -> config -> p_api_ctrl , uart -> config -> p_cfg );
@@ -237,26 +247,66 @@ static int ra_uart_putc(struct rt_serial_device *serial, char c)
237247 uart = rt_container_of (serial , struct ra_uart , serial );
238248 RT_ASSERT (uart != RT_NULL );
239249
240- #if defined(SOC_SERIES_R7FA8M85 ) || defined(SOC_SERIES_R7KA8P1 )
250+ #if defined(SOC_SERIES_R7SA6W1 )
251+ uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t * )uart -> config -> p_api_ctrl ;
252+
253+ if (!R_UART_W_IsOpened (uart -> config -> p_api_ctrl ))
254+ {
255+ return -1 ;
256+ }
257+
258+ while (p_ctrl -> p_reg -> UART_FR_REG_b .TXFF )
259+ {
260+ }
261+
262+ (* (volatile rt_uint8_t * ) & p_ctrl -> p_reg -> UART_DR_REG ) = (rt_uint8_t )c ;
263+
264+ while (p_ctrl -> p_reg -> UART_FR_REG_b .BUSY )
265+ {
266+ }
267+ #elif defined(SOC_SERIES_R7FA8M85 ) || defined(SOC_SERIES_R7KA8P1 )
241268 sci_b_uart_instance_ctrl_t * p_ctrl = (sci_b_uart_instance_ctrl_t * )uart -> config -> p_api_ctrl ;
269+
270+ p_ctrl -> p_reg -> TDR = c ;
271+
272+ while ((p_ctrl -> p_reg -> CSR_b .TEND ) == 0 );
242273#else
243274 sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t * )uart -> config -> p_api_ctrl ;
244- #endif
245275
246276 p_ctrl -> p_reg -> TDR = c ;
247277
248- #if defined(SOC_SERIES_R7FA8M85 ) || defined( SOC_SERIES_R9A07G0 ) || defined( SOC_SERIES_R7KA8P1 )
278+ #if defined(SOC_SERIES_R9A07G0 )
249279 while ((p_ctrl -> p_reg -> CSR_b .TEND ) == 0 );
250- #else
280+ #else
251281 while ((p_ctrl -> p_reg -> SSR_b .TEND ) == 0 );
282+ #endif
252283#endif
253284
254285 return RT_EOK ;
255286}
256287
257288static int ra_uart_getc (struct rt_serial_device * serial )
258289{
290+ #if defined(SOC_SERIES_R7SA6W1 )
291+ struct ra_uart * uart ;
292+ uart_w_instance_ctrl_t * p_ctrl ;
293+
294+ RT_ASSERT (serial != RT_NULL );
295+
296+ uart = rt_container_of (serial , struct ra_uart , serial );
297+ RT_ASSERT (uart != RT_NULL );
298+
299+ p_ctrl = (uart_w_instance_ctrl_t * )uart -> config -> p_api_ctrl ;
300+
301+ if (!R_UART_W_IsOpened (uart -> config -> p_api_ctrl ) || p_ctrl -> p_reg -> UART_FR_REG_b .RXFE )
302+ {
303+ return -1 ;
304+ }
305+
306+ return (int )(* (volatile rt_uint8_t * ) & p_ctrl -> p_reg -> UART_DR_REG );
307+ #else
259308 return RT_EOK ;
309+ #endif
260310}
261311
262312static rt_ssize_t ra_uart_transmit (struct rt_serial_device * serial ,
@@ -271,7 +321,17 @@ static rt_ssize_t ra_uart_transmit(struct rt_serial_device *serial,
271321 uart = rt_container_of (serial , struct ra_uart , serial );
272322 RT_ASSERT (uart != RT_NULL );
273323
324+ #if defined(SOC_SERIES_R7SA6W1 )
325+ RT_UNUSED (uart );
326+ RT_UNUSED (tx_flag );
327+
328+ for (rt_size_t i = 0 ; i < size ; i ++ )
329+ {
330+ ra_uart_putc (serial , (char )buf [i ]);
331+ }
332+ #else
274333 ra_uart_control (serial , RT_DEVICE_CTRL_SET_INT , (void * )tx_flag );
334+ #endif
275335
276336 return size ;
277337}
0 commit comments