Home › Forums › TinyG › TinyG Support › [HELP] Remapping Serial0 to Serial1 on ATXMEGA192
- This topic has 8 replies, 2 voices, and was last updated 9 years, 10 months ago by cmcgrath5035.
-
AuthorPosts
-
January 3, 2015 at 4:10 pm #7239UltronMember
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!
- This topic was modified 9 years, 10 months ago by Ultron.
January 3, 2015 at 4:32 pm #7241cmcgrath5035ModeratorBummer
You might want to repost this query over atThe developers hang out in that space a lot more than here, and that’s the help source you probably need here.
January 5, 2015 at 2:16 pm #7248UltronMemberIn 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?
January 5, 2015 at 3:53 pm #7249cmcgrath5035ModeratorDid you, as Riley suggested, review
And have you reviewed the schematic for your TinyG version?
And have you verified that you can in fact get physical access to those leads on the device?
A quick look to me sees PortC ser 1 already connects to the SPI Connector (J13), probably causing a lot of other conflicts?January 5, 2015 at 4:36 pm #7251UltronMemberThanks 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!
January 5, 2015 at 4:50 pm #7252cmcgrath5035ModeratorSPI – 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
January 5, 2015 at 5:04 pm #7253UltronMemberYes, 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?
January 5, 2015 at 6:10 pm #7256UltronMemberYEAAAAHHHH! 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 IRQwith 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 assignmentwith 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 maskwith 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 pinwith 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
January 5, 2015 at 6:41 pm #7257cmcgrath5035ModeratorCongratulations!
I misread this commentIn 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…..
-
AuthorPosts
- You must be logged in to reply to this topic.