This is the mail archive of the ecos-patches@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH]:add support for at91sam7x processor to work in different supported USART MODE


AT91sam7x hardware supports different usart configurations like
RS485,IrDA.
Patch helps that to be set during compile time.

Thanks & Regards
vibi

Index: packages/devs/serial/arm/at91/current/src/at91_serial.c
===================================================================
RCS file: /media/nfs/ecos-exp/ecos/packages/devs/serial/arm/at91/current/src/at91_serial.c,v
retrieving revision 1.1.1.1
diff -u -5 -p -r1.1.1.1 at91_serial.c
--- packages/devs/serial/arm/at91/current/src/at91_serial.c	28 Mar 2009 11:18:51 -0000	1.1.1.1
+++ packages/devs/serial/arm/at91/current/src/at91_serial.c	30 Mar 2009 06:23:22 -0000
@@ -88,10 +88,11 @@ typedef struct at91_serial_info {
     cyg_handle_t   serial_interrupt_handle;
     cyg_uint8      *rcv_buffer[2];
     cyg_uint16     rcv_chunk_size;
     cyg_uint8      curbuf;
     cyg_uint8      flags;
+    cyg_uint8      mode;
 } at91_serial_info;
 
 static bool at91_serial_init(struct cyg_devtab_entry *tab);
 static bool at91_serial_putc_interrupt(serial_channel *chan, unsigned char c);
 #if (defined(CYGPKG_IO_SERIAL_ARM_AT91_SERIAL0) && CYGNUM_IO_SERIAL_ARM_AT91_SERIAL0_BUFSIZE == 0) \
@@ -145,11 +146,12 @@ static cyg_uint8 at91_serial_rcv_buffer_
     [2][CYGNUM_IO_SERIAL_ARM_AT91_SERIAL0_RCV_CHUNK_SIZE + RCVBUF_EXTRA];
 static at91_serial_info at91_serial_info0 = {
     base            : (CYG_ADDRWORD) AT91_USART0,
     int_num         : CYGNUM_HAL_INTERRUPT_USART0,
     rcv_chunk_size  : CYGNUM_IO_SERIAL_ARM_AT91_SERIAL0_RCV_CHUNK_SIZE,
-    rcv_buffer      : {at91_serial_rcv_buffer_0[0], at91_serial_rcv_buffer_0[1]}
+    rcv_buffer      : {at91_serial_rcv_buffer_0[0], at91_serial_rcv_buffer_0[1]},
+    mode            : AT91_US_MR_USART_MODE_NORMAL
 };
 
 #if CYGNUM_IO_SERIAL_ARM_AT91_SERIAL0_BUFSIZE > 0
 static unsigned char at91_serial_out_buf0[CYGNUM_IO_SERIAL_ARM_AT91_SERIAL0_BUFSIZE];
 static unsigned char at91_serial_in_buf0[CYGNUM_IO_SERIAL_ARM_AT91_SERIAL0_BUFSIZE];
@@ -192,11 +194,12 @@ static cyg_uint8 at91_serial_rcv_buffer_
     [2][CYGNUM_IO_SERIAL_ARM_AT91_SERIAL1_RCV_CHUNK_SIZE + RCVBUF_EXTRA];
 static at91_serial_info at91_serial_info1 = {
     base            : (CYG_ADDRWORD) AT91_USART1,
     int_num         : CYGNUM_HAL_INTERRUPT_USART1,
     rcv_chunk_size  : CYGNUM_IO_SERIAL_ARM_AT91_SERIAL1_RCV_CHUNK_SIZE,
-    rcv_buffer      : {at91_serial_rcv_buffer_1[0], at91_serial_rcv_buffer_1[1]}
+    rcv_buffer      : {at91_serial_rcv_buffer_1[0], at91_serial_rcv_buffer_1[1]},
+    mode            : AT91_US_MR_USART_MODE_NORMAL
 };
 #if CYGNUM_IO_SERIAL_ARM_AT91_SERIAL1_BUFSIZE > 0
 static unsigned char at91_serial_out_buf1[CYGNUM_IO_SERIAL_ARM_AT91_SERIAL1_BUFSIZE];
 static unsigned char at91_serial_in_buf1[CYGNUM_IO_SERIAL_ARM_AT91_SERIAL1_BUFSIZE];
 
@@ -240,11 +243,12 @@ static cyg_uint8 at91_serial_rcv_buffer_
     [2][CYGNUM_IO_SERIAL_ARM_AT91_SERIAL2_RCV_CHUNK_SIZE + RCVBUF_EXTRA];
 static at91_serial_info at91_serial_info2 = {
     base            : (CYG_ADDRWORD) AT91_USART2,
     int_num         : CYGNUM_HAL_INTERRUPT_USART2,
     rcv_chunk_size  : CYGNUM_IO_SERIAL_ARM_AT91_SERIAL2_RCV_CHUNK_SIZE,
-    rcv_buffer      : {at91_serial_rcv_buffer_2[0], at91_serial_rcv_buffer_2[1]}
+    rcv_buffer      : {at91_serial_rcv_buffer_2[0], at91_serial_rcv_buffer_2[1]},
+    mode            : AT91_US_MR_USART_MODE_NORMAL
 };
 
 #if CYGNUM_IO_SERIAL_ARM_AT91_SERIAL2_BUFSIZE > 0
 static unsigned char at91_serial_out_buf2[CYGNUM_IO_SERIAL_ARM_AT91_SERIAL2_BUFSIZE];
 static unsigned char at91_serial_in_buf2[CYGNUM_IO_SERIAL_ARM_AT91_SERIAL2_BUFSIZE];
@@ -301,11 +305,11 @@ at91_serial_config_port(serial_channel *
 
     // Reset device
     HAL_WRITE_UINT32(base + AT91_US_CR, AT91_US_CR_RxRESET | AT91_US_CR_TxRESET);
 
     // Configuration
-    HAL_WRITE_UINT32(base + AT91_US_MR, parity | word_length | stop_bits);
+    HAL_WRITE_UINT32(base + AT91_US_MR,at91_chan->mode | parity | word_length | stop_bits);
 
     // Baud rate
     HAL_WRITE_UINT32(base + AT91_US_BRG, AT91_US_BAUD(select_baud[new_config->baud]));
 
     // Disable all interrupts
Index: packages/hal/arm/at91/var/current/include/var_io.h
===================================================================
RCS file: /media/nfs/ecos-exp/ecos/packages/hal/arm/at91/var/current/include/var_io.h,v
retrieving revision 1.1.1.1
diff -u -5 -p -r1.1.1.1 var_io.h
--- packages/hal/arm/at91/var/current/include/var_io.h	28 Mar 2009 11:18:18 -0000	1.1.1.1
+++ packages/hal/arm/at91/var/current/include/var_io.h	28 Mar 2009 11:42:37 -0000
@@ -73,10 +73,20 @@
 #define AT91_US_CR_TxENAB  (1<<6)
 #define AT91_US_CR_TxDISAB (1<<7)
 #define AT91_US_CR_RSTATUS (1<<8)
 #define AT91_US_CR_STTTO   (1<<11)
 #define AT91_US_MR  0x04  // Mode register
+#define AT91_US_MR_USART_MODE   0
+#define AT91_US_MR_USART_MODE_NORMAL        (0<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_RS485         (1<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_HW_HNDSHAKE   (2<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_MODEM         (3<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_ISO7816T0     (4<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_RESERVED      (5<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_ISO7816T1     (6<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_RESERVED      (7<<AT91_US_MR_USART_MODE)
+#define AT91_US_MR_USART_MODE_IrDA          (8<<AT91_US_MR_USART_MODE)
 #define AT91_US_MR_CLOCK   4
 #define AT91_US_MR_CLOCK_MCK  (0<<AT91_US_MR_CLOCK)
 #define AT91_US_MR_CLOCK_MCK8 (1<<AT91_US_MR_CLOCK)
 #define AT91_US_MR_CLOCK_SCK  (2<<AT91_US_MR_CLOCK)
 #define AT91_US_MR_LENGTH  6

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]