static void uart_stm32_poll_out(struct device *dev, unsigned char c) { USART_TypeDef *UartInstance = UART_STRUCT(dev); /* Wait for TXE flag to be raised */ while (!LL_USART_IsActiveFlag_TXE(UartInstance)) ; LL_USART_ClearFlag_TC(UartInstance); LL_USART_TransmitData8(UartInstance, (u8_t)c); }
int _write (int fd, const void *buf, size_t count) { if ((fd != STDOUT_FILENO) && (fd != STDERR_FILENO)) { errno = EBADF; return -1; } // size_t i; uint8_t* ch = ((uint8_t*)buf); for(size_t i = 0; i < count; i++){ // while(!LL_USART_IsActiveFlag_TXE(USART6)); LL_USART_TransmitData8(USART6, *ch++); while(!LL_USART_IsActiveFlag_TXE(USART6)); } return count; }
static int uart_stm32_fifo_fill(struct device *dev, const u8_t *tx_data, int size) { USART_TypeDef *UartInstance = UART_STRUCT(dev); u8_t num_tx = 0U; while ((size - num_tx > 0) && LL_USART_IsActiveFlag_TXE(UartInstance)) { /* TXE flag will be cleared with byte write to DR|RDR register */ /* Send a character (8bit , parity none) */ LL_USART_TransmitData8(UartInstance, tx_data[num_tx++]); } return num_tx; }
static int uart_stm32_irq_tx_complete(struct device *dev) { USART_TypeDef *UartInstance = UART_STRUCT(dev); return LL_USART_IsActiveFlag_TXE(UartInstance); }