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
#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 */
/* 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);
--- /dev/null
+/* 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
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
#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));
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);
--- /dev/null
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(0)
#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));
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);
--- /dev/null
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(1)
#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));
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);
--- /dev/null
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(2)
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
#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));
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);
.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,
};
--- /dev/null
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(0)
#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));
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);
--- /dev/null
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(1)
#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));
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);
--- /dev/null
+#include <periph/sci_rs232_bufs.h>
+
+DEFINE_SCI_DEFAULT_BUFS(2)