summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-11-01 07:17:54 +0000
committer[email protected] <[email protected]>2012-11-01 07:17:54 +0000
commitdb58e3350bf17f0b6eab5e2518d6595d7eff59fb (patch)
tree8a4eb3ed2affe4702931a61ae66c8591a2edda2c /components/drivers/include
parent6773015c4a3515d717e4678bd06827a9f2addcb9 (diff)
add serial DMA transmit function(beta)
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2382 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/serial.h22
-rw-r--r--components/drivers/include/rtdevice.h6
2 files changed, 19 insertions, 9 deletions
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);