Lines Matching defs:huart
93 * @param huart: UART handle.
96 static unsigned long uart_get_clock_freq(struct stm32_uart_handle_s *huart)
98 return fdt_get_uart_clock_freq((uintptr_t)huart->base);
103 * @param huart: UART handle.
106 static int uart_set_config(struct stm32_uart_handle_s *huart,
116 clockfreq = uart_get_clock_freq(huart);
137 mmio_write_32(huart->base + USART_BRR, brrtemp);
153 mmio_clrsetbits_32(huart->base + USART_CR1, STM32_UART_CR1_FIELDS, tmpreg);
160 mmio_clrsetbits_32(huart->base + USART_CR2, STM32_UART_CR2_FIELDS,
181 mmio_clrsetbits_32(huart->base + USART_CR3, STM32_UART_CR3_FIELDS, tmpreg);
189 mmio_clrsetbits_32(huart->base + USART_PRESC, USART_PRESC_PRESCALER,
197 * @param huart: UART handle.
201 static int stm32_uart_wait_flag(struct stm32_uart_handle_s *huart, uint32_t flag)
205 while ((mmio_read_32(huart->base + USART_ISR) & flag) == 0U) {
216 * @param huart: UART handle.
219 static int stm32_uart_check_idle(struct stm32_uart_handle_s *huart)
224 if ((mmio_read_32(huart->base + USART_CR1) & USART_CR1_TE) == USART_CR1_TE) {
225 ret = stm32_uart_wait_flag(huart, USART_ISR_TEACK);
232 if ((mmio_read_32(huart->base + USART_CR1) & USART_CR1_RE) == USART_CR1_RE) {
233 ret = stm32_uart_wait_flag(huart, USART_ISR_REACK);
244 * @param huart: UART handle.
276 static bool stm32_uart_error_detected(struct stm32_uart_handle_s *huart)
278 return (mmio_read_32(huart->base + USART_ISR) & STM32_UART_ISR_ERRORS) != 0U;
284 static void stm32_uart_error_clear(struct stm32_uart_handle_s *huart)
286 mmio_write_32(huart->base + USART_ICR, STM32_UART_ISR_ERRORS);
300 * @param huart: UART handle.
305 int stm32_uart_init(struct stm32_uart_handle_s *huart,
314 if (huart == NULL || init == NULL || base_addr == 0U) {
318 huart->base = base_addr;
347 stm32_uart_stop(huart->base);
350 huart->rdr_mask = stm32_uart_rdr_mask(init);
353 ret = uart_set_config(huart, init);
359 mmio_setbits_32(huart->base + USART_CR1, USART_CR1_UE);
362 return stm32_uart_check_idle(huart);
367 * @param huart: UART handle.
371 int stm32_uart_putc(struct stm32_uart_handle_s *huart, int c)
375 if (huart == NULL) {
379 ret = stm32_uart_wait_flag(huart, USART_ISR_TXE);
384 mmio_write_32(huart->base + USART_TDR, c);
385 if (stm32_uart_error_detected(huart)) {
386 stm32_uart_error_clear(huart);
395 * @param huart: UART handle.
398 int stm32_uart_flush(struct stm32_uart_handle_s *huart)
402 if (huart == NULL) {
406 ret = stm32_uart_wait_flag(huart, USART_ISR_TXE);
411 return stm32_uart_wait_flag(huart, USART_ISR_TC);
418 int stm32_uart_getc(struct stm32_uart_handle_s *huart)
422 if (huart == NULL) {
427 if ((mmio_read_32(huart->base + USART_ISR) & USART_ISR_RXNE) == 0U) {
431 data = mmio_read_32(huart->base + USART_RDR) & huart->rdr_mask;
433 if (stm32_uart_error_detected(huart)) {
434 stm32_uart_error_clear(huart);