From 2f6ad79a6f41cc36a8838bb4e094ab2697820c46 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Fri, 10 Nov 2006 21:29:00 +0000 Subject: [PATCH] Sizes of RS232 buffers can be specified by applications. darcs-hash:20061110212929-f2ef6-f624836b3e67b3f8fe8727ed215a8a1ec27d69b1.gz --- arch/h8300/generic/drivers/Makefile.omk | 2 +- arch/h8300/generic/drivers/periph/sci_rs232.h | 13 ++++++++----- .../generic/drivers/periph/sci_rs232_bufs.h | 19 +++++++++++++++++++ arch/h8300/mach-2633/drivers/Makefile.omk | 2 +- arch/h8300/mach-2633/drivers/sci0.c | 8 ++++++++ arch/h8300/mach-2633/drivers/sci0bufs.c | 3 +++ arch/h8300/mach-2633/drivers/sci1.c | 8 ++++++++ arch/h8300/mach-2633/drivers/sci1bufs.c | 3 +++ arch/h8300/mach-2633/drivers/sci2.c | 8 ++++++++ arch/h8300/mach-2633/drivers/sci2bufs.c | 3 +++ arch/h8300/mach-2638/drivers/Makefile.omk | 2 +- arch/h8300/mach-2638/drivers/sci0.c | 10 +++++++++- arch/h8300/mach-2638/drivers/sci0bufs.c | 3 +++ arch/h8300/mach-2638/drivers/sci1.c | 8 ++++++++ arch/h8300/mach-2638/drivers/sci1bufs.c | 3 +++ arch/h8300/mach-2638/drivers/sci2.c | 8 ++++++++ arch/h8300/mach-2638/drivers/sci2bufs.c | 3 +++ 17 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 arch/h8300/generic/drivers/periph/sci_rs232_bufs.h create mode 100644 arch/h8300/mach-2633/drivers/sci0bufs.c create mode 100644 arch/h8300/mach-2633/drivers/sci1bufs.c create mode 100644 arch/h8300/mach-2633/drivers/sci2bufs.c create mode 100644 arch/h8300/mach-2638/drivers/sci0bufs.c create mode 100644 arch/h8300/mach-2638/drivers/sci1bufs.c create mode 100644 arch/h8300/mach-2638/drivers/sci2bufs.c diff --git a/arch/h8300/generic/drivers/Makefile.omk b/arch/h8300/generic/drivers/Makefile.omk index 19f4e4c..dbab526 100644 --- a/arch/h8300/generic/drivers/Makefile.omk +++ b/arch/h8300/generic/drivers/Makefile.omk @@ -3,4 +3,4 @@ lib_LIBRARIES=arch_drivers arch_drivers_SOURCES = sci_rs232.c -nobase_include_HEADERS = periph/iic_ifc.h periph/sci_rs232.h +nobase_include_HEADERS = periph/iic_ifc.h periph/sci_rs232.h periph/sci_rs232_bufs.h diff --git a/arch/h8300/generic/drivers/periph/sci_rs232.h b/arch/h8300/generic/drivers/periph/sci_rs232.h index f0072aa..0941e5d 100644 --- a/arch/h8300/generic/drivers/periph/sci_rs232.h +++ b/arch/h8300/generic/drivers/periph/sci_rs232.h @@ -17,13 +17,14 @@ #define SCI_CHAR_XON 0x11 #define SCI_CHAR_XOFF 0x13 #define SCI_RS232_MODEA SCI_SMR_8N1 -#define SCI_RS232_BUF_LEN (300) -#define SCI_RS232_BUF_FULLTG (50) +/* If the input buffer has only SCI_RS232_BUF_FULLTG bytes free, flow + * control is used to stop the sender. */ +#define SCI_RS232_BUF_FULLTG (50) #define RS232_BAUD_RAW 0xff00 #define SCI_RSFLC_HW 0x1 #define SCI_RSFLC_XON 0x2 -#define SCI_RSFL_ROR 0x1 /* Overrun error */ /*fronta zmaku je plna - doslo k prepsani (RXI)*/ +#define SCI_RSFL_ROR 0x1 /* Overrun error */ /*fronta znaku je plna - doslo k prepsani (RXI)*/ #define SCI_RSFL_RFE 0x2 /* Framing error */ #define SCI_RSFL_RPE 0x4 /* Parity error */ #define SCI_RSFL_SXOFF 0x10 /* Request to send XOFF */ @@ -66,8 +67,10 @@ typedef struct sci_info { /* Queues */ sci_que_t sci_rs232_que_in; sci_que_t sci_rs232_que_out; - __u8 sci_rs232_buf_in[SCI_RS232_BUF_LEN]; - __u8 sci_rs232_buf_out[SCI_RS232_BUF_LEN]; + __u8 *sci_rs232_buf_in; + int sci_rs232_buf_in_size; + __u8 *sci_rs232_buf_out; + int sci_rs232_buf_out_size; } sci_info_t; int sci_rs232_sendch(int c, int chan); diff --git a/arch/h8300/generic/drivers/periph/sci_rs232_bufs.h b/arch/h8300/generic/drivers/periph/sci_rs232_bufs.h new file mode 100644 index 0000000..b1aa877 --- /dev/null +++ b/arch/h8300/generic/drivers/periph/sci_rs232_bufs.h @@ -0,0 +1,19 @@ +/* Macros for definitions of default buffers for sci channels. */ +#ifndef _SCIBUF_H +#define _SCIBUF_H + +#define DECLARE_SCI_BUFS(chan) \ +extern char sci_rs232_buf_in_##chan[]; \ +extern int sci_rs232_buf_in_##chan##_size; \ +extern char sci_rs232_buf_out_##chan[]; \ +extern int sci_rs232_buf_out_##chan##_size; + + +#define DEFINE_SCI_DEFAULT_BUFS(chan) \ +char sci_rs232_buf_in_##chan[64]; \ +int sci_rs232_buf_in_##chan##_size = sizeof(sci_rs232_buf_in_##chan); \ +char sci_rs232_buf_out_##chan[128]; \ +int sci_rs232_buf_out_##chan##_size = sizeof(sci_rs232_buf_out_##chan); + + +#endif diff --git a/arch/h8300/mach-2633/drivers/Makefile.omk b/arch/h8300/mach-2633/drivers/Makefile.omk index b996b73..1f0b143 100644 --- a/arch/h8300/mach-2633/drivers/Makefile.omk +++ b/arch/h8300/mach-2633/drivers/Makefile.omk @@ -1,5 +1,5 @@ lib_LIBRARIES = sci_channels -sci_channels_SOURCES = sci0.c sci1.c sci2.c sci_channels.c sci_default.c +sci_channels_SOURCES = sci0.c sci0bufs.c sci1.c sci1bufs.c sci2.c sci2bufs.c sci_channels.c sci_default.c nobase_include_HEADERS = periph/sci_channels.h periph/sci_regs.h diff --git a/arch/h8300/mach-2633/drivers/sci0.c b/arch/h8300/mach-2633/drivers/sci0.c index b4025b5..372f0d2 100644 --- a/arch/h8300/mach-2633/drivers/sci0.c +++ b/arch/h8300/mach-2633/drivers/sci0.c @@ -2,6 +2,7 @@ #include #include #include +#include void sci_rs232_eri_isr_0(void) __attribute__ ((interrupt_handler)); void sci_rs232_rxi_isr_0(void) __attribute__ ((interrupt_handler)); @@ -15,8 +16,15 @@ void sci_rs232_tei_isr_0() { sci_rs232_tei_isr(&sci_rs232_chan0); } int sci_rs232_rxd_pin_0() { return (*DIO_PORT3)&(1<<1); } +DECLARE_SCI_BUFS(0) + void sci_rs232_init_0() { + sci_rs232_chan0.sci_rs232_buf_in = sci_rs232_buf_in_0; + sci_rs232_chan0.sci_rs232_buf_in_size = sci_rs232_buf_in_0_size; + sci_rs232_chan0.sci_rs232_buf_out = sci_rs232_buf_out_0; + sci_rs232_chan0.sci_rs232_buf_out_size = sci_rs232_buf_out_0_size; + *SYS_MSTPCRB&=~MSTPCRB_SCI0m; excptvec_set(EXCPTVEC_ERI0, sci_rs232_eri_isr_0); diff --git a/arch/h8300/mach-2633/drivers/sci0bufs.c b/arch/h8300/mach-2633/drivers/sci0bufs.c new file mode 100644 index 0000000..4dbef55 --- /dev/null +++ b/arch/h8300/mach-2633/drivers/sci0bufs.c @@ -0,0 +1,3 @@ +#include + +DEFINE_SCI_DEFAULT_BUFS(0) diff --git a/arch/h8300/mach-2633/drivers/sci1.c b/arch/h8300/mach-2633/drivers/sci1.c index 0bd2bc5..e015394 100644 --- a/arch/h8300/mach-2633/drivers/sci1.c +++ b/arch/h8300/mach-2633/drivers/sci1.c @@ -2,6 +2,7 @@ #include #include #include +#include void sci_rs232_eri_isr_1(void) __attribute__ ((interrupt_handler)); void sci_rs232_rxi_isr_1(void) __attribute__ ((interrupt_handler)); @@ -15,8 +16,15 @@ void sci_rs232_tei_isr_1() { sci_rs232_tei_isr(&sci_rs232_chan1); } int sci_rs232_rxd_pin_1() { return (*DIO_PORT3)&(1<<2); } +DECLARE_SCI_BUFS(1) + void sci_rs232_init_1() { + sci_rs232_chan1.sci_rs232_buf_in = sci_rs232_buf_in_1; + sci_rs232_chan1.sci_rs232_buf_in_size = sci_rs232_buf_in_1_size; + sci_rs232_chan1.sci_rs232_buf_out = sci_rs232_buf_out_1; + sci_rs232_chan1.sci_rs232_buf_out_size = sci_rs232_buf_out_1_size; + *SYS_MSTPCRB&=~MSTPCRB_SCI1m; excptvec_set(EXCPTVEC_ERI1, sci_rs232_eri_isr_1); diff --git a/arch/h8300/mach-2633/drivers/sci1bufs.c b/arch/h8300/mach-2633/drivers/sci1bufs.c new file mode 100644 index 0000000..bb6ca69 --- /dev/null +++ b/arch/h8300/mach-2633/drivers/sci1bufs.c @@ -0,0 +1,3 @@ +#include + +DEFINE_SCI_DEFAULT_BUFS(1) diff --git a/arch/h8300/mach-2633/drivers/sci2.c b/arch/h8300/mach-2633/drivers/sci2.c index fcb8014..b1c49e3 100644 --- a/arch/h8300/mach-2633/drivers/sci2.c +++ b/arch/h8300/mach-2633/drivers/sci2.c @@ -2,6 +2,7 @@ #include #include #include +#include void sci_rs232_eri_isr_2(void) __attribute__ ((interrupt_handler)); void sci_rs232_rxi_isr_2(void) __attribute__ ((interrupt_handler)); @@ -15,8 +16,15 @@ void sci_rs232_tei_isr_2() { sci_rs232_tei_isr(&sci_rs232_chan2); } int sci_rs232_rxd_pin_2() { return (*DIO_PORTA)&(1<<2); } +DECLARE_SCI_BUFS(2) + void sci_rs232_init_2() { + sci_rs232_chan2.sci_rs232_buf_in = sci_rs232_buf_in_2; + sci_rs232_chan2.sci_rs232_buf_in_size = sci_rs232_buf_in_2_size; + sci_rs232_chan2.sci_rs232_buf_out = sci_rs232_buf_out_2; + sci_rs232_chan2.sci_rs232_buf_out_size = sci_rs232_buf_out_2_size; + *SYS_MSTPCRB&=~MSTPCRB_SCI2m; excptvec_set(EXCPTVEC_ERI2, sci_rs232_eri_isr_2); diff --git a/arch/h8300/mach-2633/drivers/sci2bufs.c b/arch/h8300/mach-2633/drivers/sci2bufs.c new file mode 100644 index 0000000..d6e6ff0 --- /dev/null +++ b/arch/h8300/mach-2633/drivers/sci2bufs.c @@ -0,0 +1,3 @@ +#include + +DEFINE_SCI_DEFAULT_BUFS(2) diff --git a/arch/h8300/mach-2638/drivers/Makefile.omk b/arch/h8300/mach-2638/drivers/Makefile.omk index b996b73..1f0b143 100644 --- a/arch/h8300/mach-2638/drivers/Makefile.omk +++ b/arch/h8300/mach-2638/drivers/Makefile.omk @@ -1,5 +1,5 @@ lib_LIBRARIES = sci_channels -sci_channels_SOURCES = sci0.c sci1.c sci2.c sci_channels.c sci_default.c +sci_channels_SOURCES = sci0.c sci0bufs.c sci1.c sci1bufs.c sci2.c sci2bufs.c sci_channels.c sci_default.c nobase_include_HEADERS = periph/sci_channels.h periph/sci_regs.h diff --git a/arch/h8300/mach-2638/drivers/sci0.c b/arch/h8300/mach-2638/drivers/sci0.c index e7320cc..a1b5d92 100644 --- a/arch/h8300/mach-2638/drivers/sci0.c +++ b/arch/h8300/mach-2638/drivers/sci0.c @@ -2,6 +2,7 @@ #include #include #include +#include void sci_rs232_eri_isr_0(void) __attribute__ ((interrupt_handler)); void sci_rs232_rxi_isr_0(void) __attribute__ ((interrupt_handler)); @@ -15,8 +16,15 @@ void sci_rs232_tei_isr_0() { sci_rs232_tei_isr(&sci_rs232_chan0); } int sci_rs232_rxd_pin_0() { return (*DIO_PORT3)&(1<<1); } +DECLARE_SCI_BUFS(0) + void sci_rs232_init_0() { + sci_rs232_chan0.sci_rs232_buf_in = sci_rs232_buf_in_0; + sci_rs232_chan0.sci_rs232_buf_in_size = sci_rs232_buf_in_0_size; + sci_rs232_chan0.sci_rs232_buf_out = sci_rs232_buf_out_0; + sci_rs232_chan0.sci_rs232_buf_out_size = sci_rs232_buf_out_0_size; + *SYS_MSTPCRB&=~MSTPCRB_SCI0m; excptvec_set(EXCPTVEC_ERI0, sci_rs232_eri_isr_0); @@ -31,7 +39,7 @@ sci_info_t sci_rs232_chan0 = { .sci_rs232_mode = SCI_SMR_8N1, .sci_rs232_flowc = 0, .sci_rs232_init = sci_rs232_init_0, - .sci_rs232_rxd_pin = sci_rs232_rxd_pin_0 + .sci_rs232_rxd_pin = sci_rs232_rxd_pin_0, }; diff --git a/arch/h8300/mach-2638/drivers/sci0bufs.c b/arch/h8300/mach-2638/drivers/sci0bufs.c new file mode 100644 index 0000000..4dbef55 --- /dev/null +++ b/arch/h8300/mach-2638/drivers/sci0bufs.c @@ -0,0 +1,3 @@ +#include + +DEFINE_SCI_DEFAULT_BUFS(0) diff --git a/arch/h8300/mach-2638/drivers/sci1.c b/arch/h8300/mach-2638/drivers/sci1.c index 6ce4da7..8d44a83 100644 --- a/arch/h8300/mach-2638/drivers/sci1.c +++ b/arch/h8300/mach-2638/drivers/sci1.c @@ -2,6 +2,7 @@ #include #include #include +#include void sci_rs232_eri_isr_1(void) __attribute__ ((interrupt_handler)); void sci_rs232_rxi_isr_1(void) __attribute__ ((interrupt_handler)); @@ -15,8 +16,15 @@ void sci_rs232_tei_isr_1() { sci_rs232_tei_isr(&sci_rs232_chan1); } int sci_rs232_rxd_pin_1() { return (*DIO_PORT3)&(1<<2); } +DECLARE_SCI_BUFS(1) + void sci_rs232_init_1() { + sci_rs232_chan1.sci_rs232_buf_in = sci_rs232_buf_in_1; + sci_rs232_chan1.sci_rs232_buf_in_size = sci_rs232_buf_in_1_size; + sci_rs232_chan1.sci_rs232_buf_out = sci_rs232_buf_out_1; + sci_rs232_chan1.sci_rs232_buf_out_size = sci_rs232_buf_out_1_size; + *SYS_MSTPCRB&=~MSTPCRB_SCI1m; excptvec_set(EXCPTVEC_ERI1, sci_rs232_eri_isr_1); diff --git a/arch/h8300/mach-2638/drivers/sci1bufs.c b/arch/h8300/mach-2638/drivers/sci1bufs.c new file mode 100644 index 0000000..bb6ca69 --- /dev/null +++ b/arch/h8300/mach-2638/drivers/sci1bufs.c @@ -0,0 +1,3 @@ +#include + +DEFINE_SCI_DEFAULT_BUFS(1) diff --git a/arch/h8300/mach-2638/drivers/sci2.c b/arch/h8300/mach-2638/drivers/sci2.c index 8a97d0d..11b8892 100644 --- a/arch/h8300/mach-2638/drivers/sci2.c +++ b/arch/h8300/mach-2638/drivers/sci2.c @@ -2,6 +2,7 @@ #include #include #include +#include void sci_rs232_eri_isr_2(void) __attribute__ ((interrupt_handler)); void sci_rs232_rxi_isr_2(void) __attribute__ ((interrupt_handler)); @@ -15,8 +16,15 @@ void sci_rs232_tei_isr_2() { sci_rs232_tei_isr(&sci_rs232_chan2); } int sci_rs232_rxd_pin_2() { return (*DIO_PORTA)&(1<<2); } +DECLARE_SCI_BUFS(2) + void sci_rs232_init_2() { + sci_rs232_chan2.sci_rs232_buf_in = sci_rs232_buf_in_2; + sci_rs232_chan2.sci_rs232_buf_in_size = sci_rs232_buf_in_2_size; + sci_rs232_chan2.sci_rs232_buf_out = sci_rs232_buf_out_2; + sci_rs232_chan2.sci_rs232_buf_out_size = sci_rs232_buf_out_2_size; + *SYS_MSTPCRB&=~MSTPCRB_SCI2m; excptvec_set(EXCPTVEC_ERI2, sci_rs232_eri_isr_2); diff --git a/arch/h8300/mach-2638/drivers/sci2bufs.c b/arch/h8300/mach-2638/drivers/sci2bufs.c new file mode 100644 index 0000000..d6e6ff0 --- /dev/null +++ b/arch/h8300/mach-2638/drivers/sci2bufs.c @@ -0,0 +1,3 @@ +#include + +DEFINE_SCI_DEFAULT_BUFS(2) -- 2.39.2