|
@@ -41,7 +41,7 @@
|
|
|
#define SHARK_UART1_rx_dma_clk RCU_DMA
|
|
#define SHARK_UART1_rx_dma_clk RCU_DMA
|
|
|
|
|
|
|
|
// ================================================================================
|
|
// ================================================================================
|
|
|
-#define ENABLE_RX_DMA 1
|
|
|
|
|
|
|
+#define ENABLE_RX_DMA 0
|
|
|
|
|
|
|
|
static u8 shark_uart0_tx_cache[SHARK_UART_TX_MEM_SIZE];
|
|
static u8 shark_uart0_tx_cache[SHARK_UART_TX_MEM_SIZE];
|
|
|
#if UART_NUM==2
|
|
#if UART_NUM==2
|
|
@@ -135,7 +135,7 @@ static void shark_uart_rx(shark_uart_t *uart){
|
|
|
}
|
|
}
|
|
|
uart->rx_length = 0xFFFF;
|
|
uart->rx_length = 0xFFFF;
|
|
|
uart->start = false;
|
|
uart->start = false;
|
|
|
- break;
|
|
|
|
|
|
|
+ return;
|
|
|
case CH_ESC:
|
|
case CH_ESC:
|
|
|
uart->escape = true;
|
|
uart->escape = true;
|
|
|
break;
|
|
break;
|
|
@@ -184,6 +184,7 @@ static void shark_uart_dma_tx(shark_uart_t *uart)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
byte_queue_skip(&uart->tx_queue, uart->tx_length);
|
|
byte_queue_skip(&uart->tx_queue, uart->tx_length);
|
|
|
|
|
+ dma_flag_clear(uart->tx_dma_ch, DMA_FLAG_FTF);
|
|
|
DMA_CHCTL(uart->tx_dma_ch) = value & (~DMA_CHXCTL_CHEN);
|
|
DMA_CHCTL(uart->tx_dma_ch) = value & (~DMA_CHXCTL_CHEN);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -191,8 +192,6 @@ static void shark_uart_dma_tx(shark_uart_t *uart)
|
|
|
if (uart->tx_length > 0) {
|
|
if (uart->tx_length > 0) {
|
|
|
DMA_CHCNT(uart->tx_dma_ch) = uart->tx_length;
|
|
DMA_CHCNT(uart->tx_dma_ch) = uart->tx_length;
|
|
|
DMA_CHMADDR(uart->tx_dma_ch) = (u32) byte_queue_head(&uart->tx_queue);
|
|
DMA_CHMADDR(uart->tx_dma_ch) = (u32) byte_queue_head(&uart->tx_queue);
|
|
|
-
|
|
|
|
|
- dma_flag_clear(uart->tx_dma_ch, DMA_FLAG_FTF);
|
|
|
|
|
DMA_CHCTL(uart->tx_dma_ch) = value | DMA_CHXCTL_CHEN;
|
|
DMA_CHCTL(uart->tx_dma_ch) = value | DMA_CHXCTL_CHEN;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -218,7 +217,11 @@ static void shark_uart_write(shark_uart_t *uart, const u8 *buff, u16 size)
|
|
|
|
|
|
|
|
static void shark_uart_write_byte(shark_uart_t *uart, u8 value)
|
|
static void shark_uart_write_byte(shark_uart_t *uart, u8 value)
|
|
|
{
|
|
{
|
|
|
- shark_uart_write(uart, &value, 1);
|
|
|
|
|
|
|
+ //shark_uart_write(uart, &value, 1);
|
|
|
|
|
+ byte_queue_write(&uart->tx_queue, &value, 1);
|
|
|
|
|
+ if (byte_queue_get_used(&uart->tx_queue) > 64) {
|
|
|
|
|
+ shark_uart_dma_tx(uart);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -552,6 +555,7 @@ static void shark_uart_tx_end(shark_uart_t *uart)
|
|
|
{
|
|
{
|
|
|
shark_uart_write_esc(uart, (u8 *)&uart->tx_crc16, sizeof(uart->tx_crc16));
|
|
shark_uart_write_esc(uart, (u8 *)&uart->tx_crc16, sizeof(uart->tx_crc16));
|
|
|
shark_uart_write_byte(uart, CH_END);
|
|
shark_uart_write_byte(uart, CH_END);
|
|
|
|
|
+ shark_uart_dma_tx(uart);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void shark_uart_write_frame(uart_enum_t uart_no, uint8_t *bytes, int len){
|
|
void shark_uart_write_frame(uart_enum_t uart_no, uint8_t *bytes, int len){
|