Start onewire interface. But probably won't finish it
This commit is contained in:
@@ -33,6 +33,19 @@
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
static size_t calculate_ring_buffer_fill_level(size_t buffer_size, size_t get_idx, size_t put_idx)
|
||||
{
|
||||
size_t fill_level;
|
||||
|
||||
if (put_idx >= get_idx) {
|
||||
fill_level = (put_idx - get_idx);
|
||||
} else {
|
||||
fill_level = buffer_size - get_idx + put_idx;
|
||||
}
|
||||
|
||||
return fill_level;
|
||||
}
|
||||
|
||||
static int dma_ring_buffer_switch_clock_enable(uint8_t base_dma, bool clk_en)
|
||||
{
|
||||
int ret_val;
|
||||
@@ -141,6 +154,19 @@ void dma_ring_buffer_periph_to_mem_stop(struct dma_ring_buffer_to_mem *buff)
|
||||
memset(buff, 0, sizeof(struct dma_ring_buffer_to_mem));
|
||||
}
|
||||
|
||||
int dma_ring_buffer_periph_to_mem_fill_level(struct dma_ring_buffer_to_mem *buff, size_t *fill_level)
|
||||
{
|
||||
size_t put_idx;
|
||||
|
||||
if (!buff || !fill_level)
|
||||
return -1000;
|
||||
|
||||
put_idx = buff->buffer_count - buff->dma->NDTR;
|
||||
*fill_level = calculate_ring_buffer_fill_level(buff->buffer_count, buff->get_idx, put_idx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dma_ring_buffer_mem_to_periph_initialize(struct dma_ring_buffer_to_periph *dma_buffer, uint8_t base_dma_id, DMA_Stream_TypeDef *dma_stream, size_t buffer_element_count, size_t element_size, volatile void *data_buffer, uint8_t dma_trigger_channel, void *dest_reg)
|
||||
{
|
||||
if (!dma_buffer || !dma_stream || !data_buffer || !dest_reg)
|
||||
@@ -163,19 +189,6 @@ int dma_ring_buffer_mem_to_periph_initialize(struct dma_ring_buffer_to_periph *d
|
||||
return 0;
|
||||
}
|
||||
|
||||
static size_t calculate_ring_buffer_fill_level(size_t buffer_size, size_t get_idx, size_t put_idx)
|
||||
{
|
||||
size_t fill_level;
|
||||
|
||||
if (put_idx >= get_idx) {
|
||||
fill_level = (put_idx - get_idx);
|
||||
} else {
|
||||
fill_level = buffer_size - get_idx + put_idx;
|
||||
}
|
||||
|
||||
return fill_level;
|
||||
}
|
||||
|
||||
static void queue_or_start_dma_transfer(struct dma_ring_buffer_to_periph *buff)
|
||||
{
|
||||
uint32_t dma_transfer_cnt;
|
||||
@@ -289,4 +302,14 @@ void dma_ring_buffer_mem_to_periph_stop(struct dma_ring_buffer_to_periph *buff)
|
||||
memset(buff, 0, sizeof(struct dma_ring_buffer_to_periph));
|
||||
}
|
||||
|
||||
int dma_ring_buffer_mem_to_periph_fill_level(struct dma_ring_buffer_to_periph *buff, size_t *fill_level)
|
||||
{
|
||||
if (!buff || !fill_level)
|
||||
return -1000;
|
||||
|
||||
*fill_level = calculate_ring_buffer_fill_level(buff->buffer_count, buff->dma_get_idx_current, buff->sw_put_idx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
@@ -162,6 +162,16 @@ int uart_receive_data_with_dma(struct stm_uart *uart, const char **data, size_t
|
||||
return dma_ring_buffer_periph_to_mem_get_data(&uart->rx_ring_buff, (const volatile void **)data, len);
|
||||
}
|
||||
|
||||
char uart_get_char(struct stm_uart *uart)
|
||||
{
|
||||
if (!uart)
|
||||
return 0;
|
||||
/* Wait for data to be available */
|
||||
while (!(uart->uart_dev->SR & USART_SR_RXNE));
|
||||
|
||||
return (char)uart->uart_dev->DR;
|
||||
}
|
||||
|
||||
int uart_check_rx_avail(struct stm_uart *uart)
|
||||
{
|
||||
if (!uart)
|
||||
@@ -181,3 +191,26 @@ void uart_tx_dma_complete_int_callback(struct stm_uart *uart)
|
||||
dma_ring_buffer_mem_to_periph_int_callback(&uart->tx_ring_buff);
|
||||
}
|
||||
|
||||
size_t uart_dma_tx_queue_avail(struct stm_uart *uart)
|
||||
{
|
||||
size_t fill_level = 0UL;
|
||||
|
||||
if (!uart)
|
||||
return 0UL;
|
||||
|
||||
(void)dma_ring_buffer_mem_to_periph_fill_level(&uart->tx_ring_buff, &fill_level);
|
||||
|
||||
return fill_level;
|
||||
}
|
||||
|
||||
size_t uart_dma_rx_queue_avail(struct stm_uart *uart)
|
||||
{
|
||||
size_t fill_level = 0UL;
|
||||
|
||||
if (!uart)
|
||||
return 0UL;
|
||||
|
||||
(void)dma_ring_buffer_periph_to_mem_fill_level(&uart->rx_ring_buff, &fill_level);
|
||||
|
||||
return fill_level;
|
||||
}
|
||||
|
Reference in New Issue
Block a user