]> rtime.felk.cvut.cz Git - sysless.git/commitdiff
Sizes of RS232 buffers can be specified by applications.
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 10 Nov 2006 21:29:00 +0000 (21:29 +0000)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Tue, 16 Nov 2010 15:54:51 +0000 (16:54 +0100)
darcs-hash:20061110212929-f2ef6-f624836b3e67b3f8fe8727ed215a8a1ec27d69b1.gz

17 files changed:
arch/h8300/generic/drivers/Makefile.omk
arch/h8300/generic/drivers/periph/sci_rs232.h
arch/h8300/generic/drivers/periph/sci_rs232_bufs.h [new file with mode: 0644]
arch/h8300/mach-2633/drivers/Makefile.omk
arch/h8300/mach-2633/drivers/sci0.c
arch/h8300/mach-2633/drivers/sci0bufs.c [new file with mode: 0644]
arch/h8300/mach-2633/drivers/sci1.c
arch/h8300/mach-2633/drivers/sci1bufs.c [new file with mode: 0644]
arch/h8300/mach-2633/drivers/sci2.c
arch/h8300/mach-2633/drivers/sci2bufs.c [new file with mode: 0644]
arch/h8300/mach-2638/drivers/Makefile.omk
arch/h8300/mach-2638/drivers/sci0.c
arch/h8300/mach-2638/drivers/sci0bufs.c [new file with mode: 0644]
arch/h8300/mach-2638/drivers/sci1.c
arch/h8300/mach-2638/drivers/sci1bufs.c [new file with mode: 0644]
arch/h8300/mach-2638/drivers/sci2.c
arch/h8300/mach-2638/drivers/sci2bufs.c [new file with mode: 0644]

index 19f4e4cd934e9cd87d8fa748e7d4644fc8d7d8ce..dbab526130dc9f39e271d0c46bbe7641912632b9 100644 (file)
@@ -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
index f0072aaace5e86f19987236b25a2a08bd479a75c..0941e5d6847199e2eb9ff6e95064065b2807e20d 100644 (file)
 #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 (file)
index 0000000..b1aa877
--- /dev/null
@@ -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
index b996b732f75cc38cf79491218721c09985d77cab..1f0b14379146c26c69ed7cfdfcc31cd8902c846f 100644 (file)
@@ -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
index b4025b50c1aabd711d040465ccf5ca1a29cfa503..372f0d28c5bfb4ddd9fb2b5b9cc7203beb4c78ac 100644 (file)
@@ -2,6 +2,7 @@
 #include <periph/sci_channels.h>
 #include <h8s2633h.h>
 #include <cpu_def.h>
+#include <periph/sci_rs232_bufs.h>
 
 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 (file)
index 0000000..4dbef55
--- /dev/null
@@ -0,0 +1,3 @@
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(0)
index 0bd2bc5206c87c363f6c2bf7bab5bf7d28701d60..e0153943a015f48665164d44ba704fe8ad279c54 100644 (file)
@@ -2,6 +2,7 @@
 #include <periph/sci_channels.h>
 #include <h8s2633h.h>
 #include <cpu_def.h>
+#include <periph/sci_rs232_bufs.h>
 
 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 (file)
index 0000000..bb6ca69
--- /dev/null
@@ -0,0 +1,3 @@
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(1)
index fcb80140d72af30848bd2903c8333284a8d2ff49..b1c49e3c5556098a1d9a66d1b07634704134e75b 100644 (file)
@@ -2,6 +2,7 @@
 #include <periph/sci_channels.h>
 #include <h8s2633h.h>
 #include <cpu_def.h>
+#include <periph/sci_rs232_bufs.h>
 
 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 (file)
index 0000000..d6e6ff0
--- /dev/null
@@ -0,0 +1,3 @@
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(2)
index b996b732f75cc38cf79491218721c09985d77cab..1f0b14379146c26c69ed7cfdfcc31cd8902c846f 100644 (file)
@@ -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
index e7320cc774a149f97b758f55b37302facdcf830c..a1b5d92f7d76ba0482b20450940da6ec037e358e 100644 (file)
@@ -2,6 +2,7 @@
 #include <periph/sci_channels.h>
 #include <h8s2638h.h>
 #include <cpu_def.h>
+#include <periph/sci_rs232_bufs.h>
 
 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 (file)
index 0000000..4dbef55
--- /dev/null
@@ -0,0 +1,3 @@
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(0)
index 6ce4da709662657e035dcf56e9bb5d564dcfe1c4..8d44a830318d4a96419d85078d650ca93db71eb6 100644 (file)
@@ -2,6 +2,7 @@
 #include <periph/sci_channels.h>
 #include <h8s2638h.h>
 #include <cpu_def.h>
+#include <periph/sci_rs232_bufs.h>
 
 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 (file)
index 0000000..bb6ca69
--- /dev/null
@@ -0,0 +1,3 @@
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(1)
index 8a97d0dbe05e377f3fcdc58948d47d4340baf83f..11b8892065001f0238e5bf8fe4cdab931a533274 100644 (file)
@@ -2,6 +2,7 @@
 #include <periph/sci_channels.h>
 #include <h8s2638h.h>
 #include <cpu_def.h>
+#include <periph/sci_rs232_bufs.h>
 
 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 (file)
index 0000000..d6e6ff0
--- /dev/null
@@ -0,0 +1,3 @@
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(2)