[HELP] Remapping Serial0 to Serial1 on ATXMEGA192

From the original Synthetos forum (2011–2025)

Started by Ultron on in TinyG Support. 8 replies, last activity Jan 5, 2015.

#

I broke the serialport on my atxmega192 (i put 5V to input RX...).

How i do for change serial port configuration and compile Xboot project, on AVRstudio 4?

I would change the port0 (pinPortC 2,3) on C, with port1 (pinPortC 6, 7) still on C

(i have AVRS 4.18 + SP3)

Please explain step by step.

Thanks!

Staff #

Bummer
You might want to repost this query over at

https://github.com/synthetos/TinyG/issues

The developers hang out in that space a lot more than here, and that's the help source you probably need here.

#

In that place i have not help. Someone said that it is not the right place.

Existing some configuration file (.H) where i can setting the serial port, first i build the project?

#

Thanks for reply.

I should study all files of the project. This is beyond my skill.

The Hardware is simple. I not use the SPI, therefore no conflict.

I already soldered two wires on two pin of the chip atxmega. Pin are number 22 and 23 (serial1). I must only remap the serialport on the Firmware, and compile it.

My simple verify of the PortC pin

#include <avr/io.h>
#include <util/delay.h>

#define BLINK_DELAY_MS 1000

int main( void )
{
  PORTC.DIRSET = 0b11111111 ; // Set pin0  to 7 to be output.
  
  while(1){ // loop forever
    PORTC.OUTSET = 0b11111111 ; // set  all output high.
    _delay_ms( BLINK_DELAY_MS ) ; // wait.
    PORTC.OUTCLR = 0b11111111 ; // set  all output low.
    _delay_ms( BLINK_DELAY_MS ) ; // wait.
  }
}

In this code, output portC 0,1,3,4,5,6,7 blinking well, but portC 2 not blink (the RX input). No output, either HIGH or LOW. This is broken!

Staff #

SPI - I believe this is part of the debugger interface, so there could be internal conflicts with the tinyG code if you just hijack the leads.

I can't comment yes/no on your test, but it looks directionally correct.
They appear to be shared functionality pins (PC1/XCK0), are you sure the PORTC.DIRSET is all you need (I have no experience)?

But, I am not super surprised that your 5V oops did more damage than just that one port interface - overvoltage could have leaked back into the 3.3vBus and done random (or widespread) damage.

Oh well

#

Yes, but i don't use debugger.

All port in chip are ok. I make some test in all pin (PortA, B, C, D, E, F) and all ok (except portC2).

I Have check this file: xio.usart.h

Inside this file there is pre-processor #define block:

-------------------------------------
//**** USB device configuration ****
//NOTE: XIO_BLOCK / XIO_NOBLOCK affects reads only. Writes always block. (see xio.h)

#define USB_BAUD XIO_BAUD_115200
#define USB_FLAGS (XIO_BLOCK | XIO_ECHO | XIO_XOFF | XIO_LINEMODE )

#define USB_USART USARTC0 // USB usart
#define USB_RX_ISR_vect USARTC0_RXC_vect // (RX) reception complete IRQ
#define USB_TX_ISR_vect USARTC0_DRE_vect // (TX) data register empty IRQ

#define USB_PORT PORTC // port where the USART is located
#define USB_CTS_bp (1) // CTS - bit position (pin is wired on board)
#define USB_CTS_bm (1<<USB_CTS_bp) // CTS - bit mask
#define USB_CTS_PINCTRL PIN1CTRL // CTS - PINxCTRL assignment
#define USB_CTS_ISR_vect PORTC_INT0_vect // CTS - Interrupt Vector (PORTC_INT0_vect or PORTC_INT1_vect)
#define USB_CTS_INTMSK INT0MASK // CTS - Interrupt Mask Register (INT0MASK or INT1MASK)
#define USB_CTS_INTLVL (PORT_INT0LVL_LO_gc)

#define USB_RTS_bp (0) // RTS - bit position (pin is wired on board)
#define USB_RTS_bm (1<<USB_RTS_bp) // RTS - bit mask

#define USB_RX_bm (1<<2) // RX pin bit mask
#define USB_TX_bm (1<<3) // TX pin bit mask

#define USB_INBITS_bm (USB_CTS_bm | USB_RX_bm) // input bits
#define USB_OUTBITS_bm (USB_RTS_bm | USB_TX_bm) // output bits
#define USB_OUTCLR_bm (USB_RTS_bm) // outputs init'd to 0
#define USB_OUTSET_bm (USB_TX_bm) // outputs init'd to 1
-------------------------

I think that this is the critical point. Can anyone confirm?

#

YEAAAAHHHH! It's works!

For anyone with my problem:

Open the file xio_usart.h. Go down at this section: //**** USB device configuration ****

In this section code you must change these lines:

#define USB_USART USARTC0 // USB usart
#define USB_RX_ISR_vect USARTC0_RXC_vect // (RX) reception complete IRQ
#define USB_TX_ISR_vect USARTC0_DRE_vect // (TX) data register empty IRQ

with these lines:

#define USB_USART USARTC1 // USB usart
#define USB_RX_ISR_vect USARTC1_RXC_vect // (RX) reception complete IRQ
#define USB_TX_ISR_vect USARTC1_DRE_vect // (TX) data register empty IRQ
(only change the C0 with C1 serial port)

These lines:
#define USB_CTS_bp (1) // CTS - bit position (pin is wired on board)
#define USB_CTS_PINCTRL PIN1CTRL // CTS - PINxCTRL assignment

with these lines:
#define USB_CTS_bp (5) // CTS - bit position (pin is wired on board)
#define USB_CTS_PINCTRL PIN5CTRL // CTS - PINxCTRL assignment
(move the old pin1 to new pin5 for CTS signal)

This line:
#define USB_RTS_bp (0) // RTS - bit position (pin is wired on board)

with line:
#define USB_RTS_bp (4) // RTS - bit position (pin is wired on board)
(move the old pin 0 to new pin 4 for RTS signal)

These lines:
#define USB_RX_bm (1<<2) // RX pin bit mask
#define USB_TX_bm (1<<3) // TX pin bit mask

with these lines:
#define USB_RX_bm (1<<6) // RX pin bit mask
#define USB_TX_bm (1<<7) // TX pin bit mask
(move the old 2,3 RX-TX pins to new pins 6 and 7)

In this section: //**** RS485 device configuration (no echo or CRLF) ****
you must change the RS485-Serial pins and the Interrupts vector.

replaced these lines:

#define RS485_USART USARTC1 // RS485 usart
#define RS485_RX_ISR_vect USARTC1_RXC_vect // (RX) reception complete IRQ
#define RS485_TX_ISR_vect USARTC1_DRE_vect // (TX) data register empty IRQ
#define RS485_TXC_ISR_vect USARTC1_TXC_vect // (TX) transmission complete IRQ

#define RS485_PORT PORTC // port where USART is located
#define RS485_RE_bm (1<<4) // RE (Receive Enable) pin - active lo
#define RS485_DE_bm (1<<5) // DE (Data Enable)(TX) - active hi
#define RS485_RX_bm (1<<6) // RX pin
#define RS485_TX_bm (1<<7) // TX pin

with these lines:

#define RS485_USART USARTC0 // RS485 usart
#define RS485_RX_ISR_vect USARTC0_RXC_vect // (RX) reception complete IRQ
#define RS485_TX_ISR_vect USARTC0_DRE_vect // (TX) data register empty IRQ
#define RS485_TXC_ISR_vect USARTC0_TXC_vect // (TX) transmission complete IRQ

#define RS485_PORT PORTC // port where USART is located
#define RS485_RE_bm (1<<0) // RE (Receive Enable) pin - active lo
#define RS485_DE_bm (1<<1) // DE (Data Enable)(TX) - active hi
#define RS485_RX_bm (1<<2) // RX pin
#define RS485_TX_bm (1<<3) // TX pin
------------------------

Basically we reversed the USB-serial with RS485-serial (not used)

Good work...

Guido

Staff #

Congratulations!
I misread this comment

In this code, output portC 0,1,3,4,5,6,7 blinking well, but portC 2 not blink (the RX input). No output, either HIGH or LOW. This is broken!

Missed the " 2 ", thought you were reporting all of PortC broken.

And thanks for the detailed summary to help out the next poor soul.....

This topic is from the original forum (January 2015). Your reply starts a new discussion linked to it.

Reply

Different problem? Ask a new question

Back to TinyG Support or latest activity.