From db58e3350bf17f0b6eab5e2518d6595d7eff59fb Mon Sep 17 00:00:00 2001 From: "dzzxzz@gmail.com" Date: Thu, 1 Nov 2012 07:17:54 +0000 Subject: add serial DMA transmit function(beta) git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2382 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/drivers/include/drivers/serial.h | 22 ++++++++++++++++------ components/drivers/include/rtdevice.h | 6 +++--- 2 files changed, 19 insertions(+), 9 deletions(-) (limited to 'components/drivers/include') diff --git a/components/drivers/include/drivers/serial.h b/components/drivers/include/drivers/serial.h index 0084543a70..b84717ecc8 100644 --- a/components/drivers/include/drivers/serial.h +++ b/components/drivers/include/drivers/serial.h @@ -57,18 +57,21 @@ #define RT_SERIAL_ERR_OVERRUN 0x01 #define RT_SERIAL_ERR_FRAMING 0x02 #define RT_SERIAL_ERR_PARITY 0x03 + +#define RT_SERIAL_TX_DATAQUEUE_SIZE 40 +#define RT_SERIAL_TX_DATAQUEUE_LWM 30 /* Default config for serial_configure structure */ #define RT_SERIAL_CONFIG_DEFAULT \ { \ BAUD_RATE_115200, /* 115200 bits/s */ \ DATA_BITS_8, /* 8 databits */ \ - STOP_BITS_1, /* 1 stopbit */ \ - PARITY_NONE, /* No parity */ \ - BIT_ORDER_LSB, /* LSB first sent */ \ - NRZ_NORMAL, /* Normal mode */ \ - 0 \ -} + STOP_BITS_1, /* 1 stopbit */ \ + PARITY_NONE, /* No parity */ \ + BIT_ORDER_LSB, /* LSB first sent */ \ + NRZ_NORMAL, /* Normal mode */ \ + 0 \ +} struct serial_ringbuffer { @@ -98,6 +101,10 @@ struct rt_serial_device struct serial_ringbuffer *int_rx; /* tx structure */ struct serial_ringbuffer *int_tx; + + struct rt_data_queue tx_dq; /* tx dataqueue */ + + volatile rt_bool_t dma_flag; /* dma transfer flag */ }; typedef struct rt_serial_device rt_serial_t; @@ -111,9 +118,12 @@ struct rt_uart_ops int (*putc)(struct rt_serial_device *serial, char c); int (*getc)(struct rt_serial_device *serial); + + rt_size_t (*dma_transmit)(struct rt_serial_device *serial, const char *buf, rt_size_t size); }; void rt_hw_serial_isr(struct rt_serial_device *serial); +void rt_hw_serial_dma_tx_isr(struct rt_serial_device *serial); rt_err_t rt_hw_serial_register(struct rt_serial_device *serial, const char *name, rt_uint32_t flag, diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h index 09e969f1a7..77e43f495d 100644 --- a/components/drivers/include/rtdevice.h +++ b/components/drivers/include/rtdevice.h @@ -125,15 +125,15 @@ rt_err_t rt_data_queue_init(struct rt_data_queue *queue, rt_uint16_t lwm, void (*evt_notify)(struct rt_data_queue *queue, rt_uint32_t event)); rt_err_t rt_data_queue_push(struct rt_data_queue *queue, - void *data_ptr, + const void *data_ptr, rt_size_t data_size, rt_int32_t timeout); rt_err_t rt_data_queue_pop(struct rt_data_queue *queue, - void **data_ptr, + const void **data_ptr, rt_size_t *size, rt_int32_t timeout); rt_err_t rt_data_queue_peak(struct rt_data_queue *queue, - void **data_ptr, + const void **data_ptr, rt_size_t *size); void rt_data_queue_reset(struct rt_data_queue *queue); -- cgit v1.3.1