提交 f615c1e9 编写于 作者: G Grissiom

Revert "Merge pull request #241 from bright-pan/master"

This reverts commit 5aeedc4f, reversing
changes made to 3d80e414.

This merge breaks every uart driver in all BSPs. @bright-pan , is there
any way to get this done without breaking existing code?
上级 54b693b3
...@@ -41,8 +41,6 @@ ...@@ -41,8 +41,6 @@
#define RT_USING_UART1 #define RT_USING_UART1
#define RT_USING_UART2 #define RT_USING_UART2
#define RT_USING_UART3 #define RT_USING_UART3
//#define RT_USING_UART4
//#define RT_USING_UART5
#endif /* __BOARD_H__ */ #endif /* __BOARD_H__ */
......
此差异已折叠。
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#define __SERIAL_H__ #define __SERIAL_H__
#include <rtthread.h> #include <rtthread.h>
#include <rtdevice.h>
#define BAUD_RATE_4800 4800 #define BAUD_RATE_4800 4800
#define BAUD_RATE_9600 9600 #define BAUD_RATE_9600 9600
...@@ -56,11 +55,6 @@ ...@@ -56,11 +55,6 @@
#define NRZ_NORMAL 0 /* Non Return to Zero : normal mode */ #define NRZ_NORMAL 0 /* Non Return to Zero : normal mode */
#define NRZ_INVERTED 1 /* Non Return to Zero : inverted mode */ #define NRZ_INVERTED 1 /* Non Return to Zero : inverted mode */
#define HW_CONTROL_NONE 0
#define HW_CONTROL_RTS 1
#define HW_CONTROL_CTS 2
#define HW_CONTROL_RTS_CTS 3
#ifndef RT_SERIAL_RB_BUFSZ #ifndef RT_SERIAL_RB_BUFSZ
#define RT_SERIAL_RB_BUFSZ 64 #define RT_SERIAL_RB_BUFSZ 64
#endif #endif
...@@ -81,23 +75,21 @@ ...@@ -81,23 +75,21 @@
#define RT_SERIAL_TX_DATAQUEUE_LWM 30 #define RT_SERIAL_TX_DATAQUEUE_LWM 30
/* Default config for serial_configure structure */ /* Default config for serial_configure structure */
#define RT_SERIAL_CONFIG_DEFAULT \ #define RT_SERIAL_CONFIG_DEFAULT \
{ \ { \
BAUD_RATE_115200, /* 115200 bits/s */ \ BAUD_RATE_115200, /* 115200 bits/s */ \
DATA_BITS_8, /* 8 databits */ \ DATA_BITS_8, /* 8 databits */ \
STOP_BITS_1, /* 1 stopbit */ \ STOP_BITS_1, /* 1 stopbit */ \
PARITY_NONE, /* No parity */ \ PARITY_NONE, /* No parity */ \
BIT_ORDER_LSB, /* LSB first sent */ \ BIT_ORDER_LSB, /* LSB first sent */ \
NRZ_NORMAL, /* Normal mode */ \ NRZ_NORMAL, /* Normal mode */ \
HW_CONTROL_NONE, /* Hardware control */\ 0 \
0 \
} }
struct serial_ringbuffer struct serial_ringbuffer
{ {
struct rt_ringbuffer rb; rt_uint8_t buffer[RT_SERIAL_RB_BUFSZ];
rt_uint8_t *pool; rt_uint16_t put_index, get_index;
rt_uint16_t size;
}; };
struct serial_configure struct serial_configure
...@@ -108,8 +100,7 @@ struct serial_configure ...@@ -108,8 +100,7 @@ struct serial_configure
rt_uint32_t parity :2; rt_uint32_t parity :2;
rt_uint32_t bit_order :1; rt_uint32_t bit_order :1;
rt_uint32_t invert :1; rt_uint32_t invert :1;
rt_uint32_t hw_control :2; rt_uint32_t reserved :20;
rt_uint32_t reserved :18;
}; };
struct rt_serial_device struct rt_serial_device
......
...@@ -25,9 +25,6 @@ ...@@ -25,9 +25,6 @@
* 2012-11-23 bernard fix compiler warning. * 2012-11-23 bernard fix compiler warning.
* 2013-02-20 bernard use RT_SERIAL_RB_BUFSZ to define * 2013-02-20 bernard use RT_SERIAL_RB_BUFSZ to define
* the size of ring buffer. * the size of ring buffer.
* 2014-02-26 bright use DeviceDriver ringbuffer.
* add hardware flow support.
* use new struct serial_ringbuffer.
*/ */
#include <rthw.h> #include <rthw.h>
...@@ -36,7 +33,9 @@ ...@@ -36,7 +33,9 @@
rt_inline void serial_ringbuffer_init(struct serial_ringbuffer *rbuffer) rt_inline void serial_ringbuffer_init(struct serial_ringbuffer *rbuffer)
{ {
rt_ringbuffer_init(&rbuffer->rb, rbuffer->pool, rbuffer->size); rt_memset(rbuffer->buffer, 0, sizeof(rbuffer->buffer));
rbuffer->put_index = 0;
rbuffer->get_index = 0;
} }
rt_inline void serial_ringbuffer_putc(struct serial_ringbuffer *rbuffer, rt_inline void serial_ringbuffer_putc(struct serial_ringbuffer *rbuffer,
...@@ -46,8 +45,17 @@ rt_inline void serial_ringbuffer_putc(struct serial_ringbuffer *rbuffer, ...@@ -46,8 +45,17 @@ rt_inline void serial_ringbuffer_putc(struct serial_ringbuffer *rbuffer,
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
rt_ringbuffer_putchar(&rbuffer->rb, ch);
// enable interrupt rbuffer->buffer[rbuffer->put_index] = ch;
rbuffer->put_index = (rbuffer->put_index + 1) & (RT_SERIAL_RB_BUFSZ - 1);
/* if the next position is read index, discard this 'read char' */
if (rbuffer->put_index == rbuffer->get_index)
{
rbuffer->get_index = (rbuffer->get_index + 1) & (RT_SERIAL_RB_BUFSZ - 1);
}
/* enable interrupt */
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
} }
...@@ -55,11 +63,25 @@ rt_inline int serial_ringbuffer_putchar(struct serial_ringbuffer *rbuffer, ...@@ -55,11 +63,25 @@ rt_inline int serial_ringbuffer_putchar(struct serial_ringbuffer *rbuffer,
char ch) char ch)
{ {
rt_base_t level; rt_base_t level;
//rt_uint16_t next_index; rt_uint16_t next_index;
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
rt_ringbuffer_putchar(&rbuffer->rb, ch);
next_index = (rbuffer->put_index + 1) & (RT_SERIAL_RB_BUFSZ - 1);
if (next_index != rbuffer->get_index)
{
rbuffer->buffer[rbuffer->put_index] = ch;
rbuffer->put_index = next_index;
}
else
{
/* enable interrupt */
rt_hw_interrupt_enable(level);
return -1;
}
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
...@@ -68,14 +90,17 @@ rt_inline int serial_ringbuffer_putchar(struct serial_ringbuffer *rbuffer, ...@@ -68,14 +90,17 @@ rt_inline int serial_ringbuffer_putchar(struct serial_ringbuffer *rbuffer,
rt_inline int serial_ringbuffer_getc(struct serial_ringbuffer *rbuffer) rt_inline int serial_ringbuffer_getc(struct serial_ringbuffer *rbuffer)
{ {
int ch = 0; int ch;
rt_base_t level; rt_base_t level;
ch = -1;
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
/* get char */ if (rbuffer->get_index != rbuffer->put_index)
if (!rt_ringbuffer_getchar(&rbuffer->rb, (rt_uint8_t *)&ch)) {
ch = -1; ch = rbuffer->buffer[rbuffer->get_index];
rbuffer->get_index = (rbuffer->get_index + 1) & (RT_SERIAL_RB_BUFSZ - 1);
}
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
...@@ -88,10 +113,7 @@ rt_inline rt_uint32_t serial_ringbuffer_size(struct serial_ringbuffer *rbuffer) ...@@ -88,10 +113,7 @@ rt_inline rt_uint32_t serial_ringbuffer_size(struct serial_ringbuffer *rbuffer)
rt_base_t level; rt_base_t level;
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
size = rt_ringbuffer_space_len(&rbuffer->rb);
/*
size = (rbuffer->put_index - rbuffer->get_index) & (RT_SERIAL_RB_BUFSZ - 1); size = (rbuffer->put_index - rbuffer->get_index) & (RT_SERIAL_RB_BUFSZ - 1);
*/
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
return size; return size;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册