Commit 11fb15c0 authored by medlem's avatar medlem
Browse files

Working USART and fixed comments and defines and tx string

parent 10bf504f
Pipeline #242 failed with stages
...@@ -7,13 +7,20 @@ ...@@ -7,13 +7,20 @@
:100060000C945A000C945A000C945A000C945A00A8 :100060000C945A000C945A000C945A000C945A00A8
:100070000C945A000C945A000C945A000C945A0098 :100070000C945A000C945A000C945A000C945A0098
:100080000C945A000C945A000C945A000C945A0088 :100080000C945A000C945A000C945A000C945A0088
:100090000C945A000C945A000C945A000C945A0078 :100090000C945A000C945A000C949B000C945A0037
:1000A00011241FBECFEFCDBFDFE3DEBF0E9476007D :1000A00011241FBECFEFCDBFDFE3DEBF0E9488006B
:1000B0000C9488000C940000E0E2F4E021E0258339 :1000B0000C94B2000C940000E0E2F4E021E025830F
:1000C0002183E0E6F8E06087BB27A92F982F872FD0 :1000C0002183E0E6F8E06087BB27A92F982F872FD0
:1000D000818783E0878380EC86830895E0E6F8E0FB :1000D000818783E0878380EC868385818068858340
:1000E000948195FFFDCF8093620808956CE675E0DA :1000E0000895E0E6F8E0948195FFFDCF80936208E3
:1000F00080E090E00E945C00789488E60E946E00A8 :1000F0000895CF93DF93EC018881882331F0219616
:1001000025ED88E092E0215080409040E1F7F5CF66 :100100000E94710089918111FBCFDF91CF910895F9
:04011000F894FFCF91 :100110006CE675E080E090E00E945C00789488E6F0
:1001200091E40E94790025ED88E092E02150804022
:100130009040E1F7F4CF1F920F920FB60F92112467
:100140008F93EF93FF93E0E6F8E084818823ECF748
:1001500080916008FF91EF918F910F900FBE0F90EB
:080160001F901895F894FFCFE1
:10016800446574746520657220656E2074657374C7
:020178000A007B
:00000001FF :00000001FF
...@@ -3,27 +3,31 @@ UART.elf: file format elf32-avr ...@@ -3,27 +3,31 @@ UART.elf: file format elf32-avr
Sections: Sections:
Idx Name Size VMA LMA File off Algn Idx Name Size VMA LMA File off Algn
0 .data 00000000 00802800 00802800 00000168 2**0 0 .data 00000000 00802800 00802800 000001ee 2**0
CONTENTS, ALLOC, LOAD, DATA CONTENTS, ALLOC, LOAD, DATA
1 .text 00000114 00000000 00000000 00000054 2**1 1 .text 00000168 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .comment 00000030 00000000 00000000 00000168 2**0 2 .rodata 00000012 00004168 00000168 000001dc 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .comment 00000030 00000000 00000000 000001ee 2**0
CONTENTS, READONLY CONTENTS, READONLY
3 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00000198 2**2 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00000220 2**2
CONTENTS, READONLY CONTENTS, READONLY
4 .debug_aranges 00000030 00000000 00000000 000001d8 2**0 5 .debug_aranges 00000040 00000000 00000000 00000260 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
5 .debug_info 000027ba 00000000 00000000 00000208 2**0 6 .debug_info 00002823 00000000 00000000 000002a0 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 0000226c 00000000 00000000 000029c2 2**0 7 .debug_abbrev 000022d2 00000000 00000000 00002ac3 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
7 .debug_line 0000036a 00000000 00000000 00004c2e 2**0 8 .debug_line 000003c8 00000000 00000000 00004d95 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000044 00000000 00000000 00004f98 2**2 9 .debug_frame 0000008c 00000000 00000000 00005160 2**2
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
9 .debug_str 000011f0 00000000 00000000 00004fdc 2**0 10 .debug_str 00001211 00000000 00000000 000051ec 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
10 .debug_ranges 00000020 00000000 00000000 000061cc 2**0 11 .debug_loc 000000d7 00000000 00000000 000063fd 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_ranges 00000030 00000000 00000000 000064d4 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
Disassembly of section .text: Disassembly of section .text:
...@@ -67,7 +71,7 @@ Disassembly of section .text: ...@@ -67,7 +71,7 @@ Disassembly of section .text:
8c: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt> 8c: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt>
90: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt> 90: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt>
94: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt> 94: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt>
98: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt> 98: 0c 94 9b 00 jmp 0x136 ; 0x136 <__vector_38>
9c: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt> 9c: 0c 94 5a 00 jmp 0xb4 ; 0xb4 <__bad_interrupt>
000000a0 <__ctors_end>: 000000a0 <__ctors_end>:
...@@ -77,8 +81,8 @@ Disassembly of section .text: ...@@ -77,8 +81,8 @@ Disassembly of section .text:
a6: cd bf out 0x3d, r28 ; 61 a6: cd bf out 0x3d, r28 ; 61
a8: df e3 ldi r29, 0x3F ; 63 a8: df e3 ldi r29, 0x3F ; 63
aa: de bf out 0x3e, r29 ; 62 aa: de bf out 0x3e, r29 ; 62
ac: 0e 94 76 00 call 0xec ; 0xec <main> ac: 0e 94 88 00 call 0x110 ; 0x110 <main>
b0: 0c 94 88 00 jmp 0x110 ; 0x110 <_exit> b0: 0c 94 b2 00 jmp 0x164 ; 0x164 <_exit>
000000b4 <__bad_interrupt>: 000000b4 <__bad_interrupt>:
b4: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> b4: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
...@@ -87,25 +91,22 @@ Disassembly of section .text: ...@@ -87,25 +91,22 @@ Disassembly of section .text:
void uart_init(unsigned long baud){ void uart_init(unsigned long baud){
//From chapter 24.3 in datasheet //From chapter 22.3.1 in datasheet
PORTB.OUTSET = (1 << 0); //Setting up TX pin as output TX_PORT.OUTSET = (1 << TX_PIN); //Setting up TX pin as output
b8: e0 e2 ldi r30, 0x20 ; 32 b8: e0 e2 ldi r30, 0x20 ; 32
ba: f4 e0 ldi r31, 0x04 ; 4 ba: f4 e0 ldi r31, 0x04 ; 4
bc: 21 e0 ldi r18, 0x01 ; 1 bc: 21 e0 ldi r18, 0x01 ; 1
be: 25 83 std Z+5, r18 ; 0x05 be: 25 83 std Z+5, r18 ; 0x05
PORTB.DIRSET = (1 << 0); //Setting up TX pin as output TX_PORT.DIRSET = (1 << TX_PIN); //Setting up TX pin as output
c0: 21 83 std Z+1, r18 ; 0x01 c0: 21 83 std Z+1, r18 ; 0x01
//USART3.BAUDH = (baud >> 8); //Shift register right by 8 bits to get the 8 high bits //Set baud rate register
//USART3.BAUDL = baud; //Set baud rate without shifting to get the 8 low bits USART3.BAUDL = (uint8_t) baud; //Set baud rate without shifting to get the 8 low bits
//It turns out the compiler can handle this automatically, meaning this works just as well:
USART3.BAUDL = (uint8_t)baud;
c2: e0 e6 ldi r30, 0x60 ; 96 c2: e0 e6 ldi r30, 0x60 ; 96
c4: f8 e0 ldi r31, 0x08 ; 8 c4: f8 e0 ldi r31, 0x08 ; 8
c6: 60 87 std Z+8, r22 ; 0x08 c6: 60 87 std Z+8, r22 ; 0x08
USART3.BAUDH = (uint8_t)(baud >> 8); USART3.BAUDH = (uint8_t)(baud >> 8); //Shift register right by 8 bits to get the 8 high bits
c8: bb 27 eor r27, r27 c8: bb 27 eor r27, r27
ca: a9 2f mov r26, r25 ca: a9 2f mov r26, r25
cc: 98 2f mov r25, r24 cc: 98 2f mov r25, r24
...@@ -114,75 +115,156 @@ void uart_init(unsigned long baud){ ...@@ -114,75 +115,156 @@ void uart_init(unsigned long baud){
//USART.CTRLC CMODE bits default to async, 1 stop bit, 8 bit character size //USART.CTRLC CMODE bits default to async, 1 stop bit, 8 bit character size
USART3.CTRLC = (0x3 << 0); //Since all bits are default 0 we only need to change the character size part
USART3.CTRLC = (0x3 << USART_CHSIZE0_bp);
d2: 83 e0 ldi r24, 0x03 ; 3 d2: 83 e0 ldi r24, 0x03 ; 3
d4: 87 83 std Z+7, r24 ; 0x07 d4: 87 83 std Z+7, r24 ; 0x07
USART3.CTRLB = (1 << USART_RXEN_bp) | (1 << USART_TXEN_bp); //Enable RX and TX //Enable RX and TX
USART3.CTRLB = (1 << USART_RXEN_bp) | (1 << USART_TXEN_bp);
d6: 80 ec ldi r24, 0xC0 ; 192 d6: 80 ec ldi r24, 0xC0 ; 192
d8: 86 83 std Z+6, r24 ; 0x06 d8: 86 83 std Z+6, r24 ; 0x06
da: 08 95 ret
000000dc <uart_transmit>: //Enable interrupts on incoming data
USART3.CTRLA |= (1 << USART_RXCIE_bp);
da: 85 81 ldd r24, Z+5 ; 0x05
dc: 80 68 ori r24, 0x80 ; 128
de: 85 83 std Z+5, r24 ; 0x05
e0: 08 95 ret
000000e2 <uart_transmit>:
//In this function we will be send data. //In this function we will be send data.
//First we should check that there isn't already data being sent //First we should check that there isn't already data being sent
// if there is, we should probably wait for it to finish first // if there is, we should probably wait for it to finish first
while (!(USART3.STATUS & (1 << USART_DREIF_bp))){ while (!(USART3.STATUS & (1 << USART_DREIF_bp))){
dc: e0 e6 ldi r30, 0x60 ; 96 e2: e0 e6 ldi r30, 0x60 ; 96
de: f8 e0 ldi r31, 0x08 ; 8 e4: f8 e0 ldi r31, 0x08 ; 8
e0: 94 81 ldd r25, Z+4 ; 0x04 e6: 94 81 ldd r25, Z+4 ; 0x04
e2: 95 ff sbrs r25, 5 e8: 95 ff sbrs r25, 5
e4: fd cf rjmp .-6 ; 0xe0 <uart_transmit+0x4> ea: fd cf rjmp .-6 ; 0xe6 <uart_transmit+0x4>
//wait for previous transmit to finish //wait for previous transmit to finish
}; };
//Put our new data into se sending register //Put our new data into tx data register
USART3.TXDATAL = data; USART3.TXDATAL = data;
e6: 80 93 62 08 sts 0x0862, r24 ; 0x800862 <__TEXT_REGION_LENGTH__+0x700862> ec: 80 93 62 08 sts 0x0862, r24 ; 0x800862 <__TEXT_REGION_LENGTH__+0x700862>
ea: 08 95 ret f0: 08 95 ret
000000f2 <uart_transmit_string>:
}
000000ec <main>: //To send a string we can do this
void uart_transmit_string(char* data) {
f2: cf 93 push r28
f4: df 93 push r29
f6: ec 01 movw r28, r24
while (*data != '\0') {
f8: 88 81 ld r24, Y
fa: 88 23 and r24, r24
fc: 31 f0 breq .+12 ; 0x10a <uart_transmit_string+0x18>
fe: 21 96 adiw r28, 0x01 ; 1
uart_transmit(*data);
100: 0e 94 71 00 call 0xe2 ; 0xe2 <uart_transmit>
}
//To send a string we can do this
void uart_transmit_string(char* data) {
while (*data != '\0') {
104: 89 91 ld r24, Y+
106: 81 11 cpse r24, r1
108: fb cf rjmp .-10 ; 0x100 <uart_transmit_string+0xe>
uart_transmit(*data);
data++;
}
}
10a: df 91 pop r29
10c: cf 91 pop r28
10e: 08 95 ret
00000110 <main>:
int main(void) int main(void)
{ {
//Initialize the UART with our function. //Initialize the UART with our function.
//We will be using a baudrate of 9600 (defined as BAUD_9600 at the top of the file) //We will be using a baudrate of 9600 (defined as BAUD_9600 at the top of the file)
uart_init(BAUD_9600); uart_init(BAUD_9600);
ec: 6c e6 ldi r22, 0x6C ; 108 110: 6c e6 ldi r22, 0x6C ; 108
ee: 75 e0 ldi r23, 0x05 ; 5 112: 75 e0 ldi r23, 0x05 ; 5
f0: 80 e0 ldi r24, 0x00 ; 0 114: 80 e0 ldi r24, 0x00 ; 0
f2: 90 e0 ldi r25, 0x00 ; 0 116: 90 e0 ldi r25, 0x00 ; 0
f4: 0e 94 5c 00 call 0xb8 ; 0xb8 <uart_init> 118: 0e 94 5c 00 call 0xb8 ; 0xb8 <uart_init>
sei(); //Enable inerrupt, important for anything here to work sei(); //Enable inerrupt, important for anything here to work
f8: 78 94 sei 11c: 78 94 sei
while (1) while (1)
{ {
//We don't really need to do anything here. //We don't really need to do anything here.
//the ISR will handle receiving. //the ISR will handle receiving.
uart_transmit('h'); uart_transmit_string("Dette er en test\n");
fa: 88 e6 ldi r24, 0x68 ; 104 11e: 88 e6 ldi r24, 0x68 ; 104
fc: 0e 94 6e 00 call 0xdc ; 0xdc <uart_transmit> 120: 91 e4 ldi r25, 0x41 ; 65
122: 0e 94 79 00 call 0xf2 ; 0xf2 <uart_transmit_string>
#else #else
//round up by default //round up by default
__ticks_dc = (uint32_t)(ceil(fabs(__tmp))); __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
#endif #endif
__builtin_avr_delay_cycles(__ticks_dc); __builtin_avr_delay_cycles(__ticks_dc);
100: 25 ed ldi r18, 0xD5 ; 213 126: 25 ed ldi r18, 0xD5 ; 213
102: 88 e0 ldi r24, 0x08 ; 8 128: 88 e0 ldi r24, 0x08 ; 8
104: 92 e0 ldi r25, 0x02 ; 2 12a: 92 e0 ldi r25, 0x02 ; 2
106: 21 50 subi r18, 0x01 ; 1 12c: 21 50 subi r18, 0x01 ; 1
108: 80 40 sbci r24, 0x00 ; 0 12e: 80 40 sbci r24, 0x00 ; 0
10a: 90 40 sbci r25, 0x00 ; 0 130: 90 40 sbci r25, 0x00 ; 0
10c: e1 f7 brne .-8 ; 0x106 <main+0x1a> 132: e1 f7 brne .-8 ; 0x12c <main+0x1c>
10e: f5 cf rjmp .-22 ; 0xfa <main+0xe> 134: f4 cf rjmp .-24 ; 0x11e <main+0xe>
00000110 <_exit>: 00000136 <__vector_38>:
110: f8 94 cli }
}
00000112 <__stop_program>:
112: ff cf rjmp .-2 ; 0x112 <__stop_program>
//Interrupt service routine for the receiver.
ISR (USART3_RXC_vect) {
136: 1f 92 push r1
138: 0f 92 push r0
13a: 0f b6 in r0, 0x3f ; 63
13c: 0f 92 push r0
13e: 11 24 eor r1, r1
140: 8f 93 push r24
142: ef 93 push r30
144: ff 93 push r31
//In the interrupt we will read the data in the receive buffer
//First we should check that new data has arrived the receive buffer
while (!(USART3.STATUS & (1 << USART_RXCIF_bp))){
146: e0 e6 ldi r30, 0x60 ; 96
148: f8 e0 ldi r31, 0x08 ; 8
14a: 84 81 ldd r24, Z+4 ; 0x04
14c: 88 23 and r24, r24
14e: ec f7 brge .-6 ; 0x14a <__vector_38+0x14>
//wait for previous transmit to finish
};
//Store the data in a temporarily variable
uint8_t tmp = USART3.RXDATAL;
150: 80 91 60 08 lds r24, 0x0860 ; 0x800860 <__TEXT_REGION_LENGTH__+0x700860>
154: ff 91 pop r31
156: ef 91 pop r30
158: 8f 91 pop r24
15a: 0f 90 pop r0
15c: 0f be out 0x3f, r0 ; 63
15e: 0f 90 pop r0
160: 1f 90 pop r1
162: 18 95 reti
00000164 <_exit>:
164: f8 94 cli
00000166 <__stop_program>:
166: ff cf rjmp .-2 ; 0x166 <__stop_program>
...@@ -153,7 +153,7 @@ END GROUP ...@@ -153,7 +153,7 @@ END GROUP
.rela.plt .rela.plt
*(.rela.plt) *(.rela.plt)
.text 0x00000000 0x114 .text 0x00000000 0x168
*(.vectors) *(.vectors)
.vectors 0x00000000 0xa0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o .vectors 0x00000000 0xa0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o
0x00000000 __vector_default 0x00000000 __vector_default
...@@ -208,7 +208,6 @@ END GROUP ...@@ -208,7 +208,6 @@ END GROUP
*(.init9) *(.init9)
*(.text) *(.text)
.text 0x000000b4 0x4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o .text 0x000000b4 0x4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o
0x000000b4 __vector_38
0x000000b4 __vector_22 0x000000b4 __vector_22
0x000000b4 __vector_28 0x000000b4 __vector_28
0x000000b4 __vector_1 0x000000b4 __vector_1
...@@ -251,18 +250,24 @@ END GROUP ...@@ -251,18 +250,24 @@ END GROUP
0x000000b8 . = ALIGN (0x2) 0x000000b8 . = ALIGN (0x2)
*(.text.*) *(.text.*)
.text.uart_init .text.uart_init
0x000000b8 0x24 UART-LF.o 0x000000b8 0x2a UART-LF.o
0x000000b8 uart_init 0x000000b8 uart_init
.text.uart_transmit .text.uart_transmit
0x000000dc 0x10 UART-LF.o 0x000000e2 0x10 UART-LF.o
0x000000dc uart_transmit 0x000000e2 uart_transmit
.text.main 0x000000ec 0x24 UART-LF.o .text.uart_transmit_string
0x000000ec main 0x000000f2 0x1e UART-LF.o
0x00000110 . = ALIGN (0x2) 0x000000f2 uart_transmit_string
.text.main 0x00000110 0x26 UART-LF.o
0x00000110 main
.text.__vector_38
0x00000136 0x2e UART-LF.o
0x00000136 __vector_38
0x00000164 . = ALIGN (0x2)
*(.fini9) *(.fini9)
.fini9 0x00000110 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3\libgcc.a(_exit.o) .fini9 0x00000164 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3\libgcc.a(_exit.o)
0x00000110 _exit 0x00000164 _exit
0x00000110 exit 0x00000164 exit
*(.fini9) *(.fini9)
*(.fini8) *(.fini8)
*(.fini8) *(.fini8)
...@@ -281,16 +286,18 @@ END GROUP ...@@ -281,16 +286,18 @@ END GROUP
*(.fini1) *(.fini1)
*(.fini1) *(.fini1)
*(.fini0) *(.fini0)
.fini0 0x00000110 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3\libgcc.a(_exit.o) .fini0 0x00000164 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3\libgcc.a(_exit.o)
*(.fini0) *(.fini0)
0x00000114 _etext = . 0x00000168 _etext = .
.rodata .rodata 0x00004168 0x12 load address 0x00000168
*(.rodata) *(.rodata)
*(.rodata*) *(.rodata*)
.rodata.str1.1
0x00004168 0x12 UART-LF.o
*(.gnu.linkonce.r*) *(.gnu.linkonce.r*)
.data 0x00802800 0x0 load address 0x00000114 .data 0x00802800 0x0 load address 0x0000017a
[!provide] PROVIDE (__data_start, .) [!provide] PROVIDE (__data_start, .)
*(.data) *(.data)
*(.data*) *(.data*)
...@@ -305,8 +312,8 @@ END GROUP ...@@ -305,8 +312,8 @@ END GROUP
*(.bss*) *(.bss*)
*(COMMON) *(COMMON)
[!provide] PROVIDE (__bss_end, .) [!provide] PROVIDE (__bss_end, .)
0x00000114 __data_load_start = LOADADDR (.data) 0x0000017a __data_load_start = LOADADDR (.data)
0x00000114 __data_load_end = (__data_load_start + SIZEOF (.data)) 0x0000017a __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x00802800 0x0 .noinit 0x00802800 0x0
[!provide] PROVIDE (__noinit_start, .) [!provide] PROVIDE (__noinit_start, .)
...@@ -377,41 +384,42 @@ END GROUP ...@@ -377,41 +384,42 @@ END GROUP
.debug_sfnames .debug_sfnames
*(.debug_sfnames) *(.debug_sfnames)
.debug_aranges 0x00000000 0x30 .debug_aranges 0x00000000 0x40
*(.debug_aranges) *(.debug_aranges)
.debug_aranges .debug_aranges
0x00000000 0x30 UART-LF.o 0x00000000 0x40 UART-LF.o
.debug_pubnames .debug_pubnames
*(.debug_pubnames) *(.debug_pubnames)
.debug_info 0x00000000 0x27ba .debug_info 0x00000000 0x2823
*(.debug_info .gnu.linkonce.wi.*) *(.debug_info .gnu.linkonce.wi.*)
.debug_info 0x00000000 0x22b7 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o .debug_info 0x00000000 0x22b7 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o
.debug_info 0x000022b7 0x503 UART-LF.o .debug_info 0x000022b7 0x56c UART-LF.o
.debug_abbrev 0x00000000 0x226c .debug_abbrev 0x00000000 0x22d2
*(.debug_abbrev) *(.debug_abbrev)
.debug_abbrev 0x00000000 0x20e0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o .debug_abbrev 0x00000000 0x20e0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o
.debug_abbrev 0x000020e0 0x18c UART-LF.o .debug_abbrev 0x000020e0 0x1f2 UART-LF.o
.debug_line 0x00000000 0x36a .debug_line 0x00000000 0x3c8
*(.debug_line .debug_line.* .debug_line_end) *(.debug_line .debug_line.* .debug_line_end)
.debug_line 0x00000000 0x187 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o .debug_line 0x00000000 0x187 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o
.debug_line 0x00000187 0x1e3 UART-LF.o .debug_line 0x00000187 0x241 UART-LF.o
.debug_frame 0x00000000 0x44 .debug_frame 0x00000000 0x8c
*(.debug_frame) *(.debug_frame)
.debug_frame 0x00000000 0x44 UART-LF.o .debug_frame 0x00000000 0x8c UART-LF.o
.debug_str 0x00000000 0x11f0 .debug_str 0x00000000 0x1211
*(.debug_str) *(.debug_str)
.debug_str 0x00000000 0xe5d C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o .debug_str 0x00000000 0xe5d C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.150/gcc/dev/atmega4809/avrxmega3/crtatmega4809.o
.debug_str 0x00000e5d 0x393 UART-LF.o .debug_str 0x00000e5d 0x3b4 UART-LF.o
0x3cc (size before relaxing) 0x3ed (size before relaxing)
.debug_loc .debug_loc 0x00000000 0xd7
*(.debug_loc) *(.debug_loc)
.debug_loc 0x00000000 0xd7 UART-LF.o
.debug_macinfo .debug_macinfo
*(.debug_macinfo) *(.debug_macinfo)
...@@ -431,9 +439,9 @@ END GROUP ...@@ -431,9 +439,9 @@ END GROUP
.debug_pubtypes .debug_pubtypes
*(.debug_pubtypes) *(.debug_pubtypes)
.debug_ranges 0x00000000 0x20 .debug_ranges 0x00000000 0x30
*(.debug_ranges) *(.debug_ranges)
.debug_ranges 0x00000000 0x20 UART-LF.o .debug_ranges 0x00000000 0x30 UART-LF.o
.debug_macro .debug_macro
*(.debug_macro) *(.debug_macro)
......
...@@ -8,13 +8,20 @@ S11300500C945A000C945A000C945A000C945A00B4 ...@@ -8,13 +8,20 @@ S11300500C945A000C945A000C945A000C945A00B4
S11300600C945A000C945A000C945A000C945A00A4 S11300600C945A000C945A000C945A000C945A00A4
S11300700C945A000C945A000C945A000C945A0094 S11300700C945A000C945A000C945A000C945A0094
S11300800C945A000C945A000C945A000C945A0084 S11300800C945A000C945A000C945A000C945A0084
S11300900C945A000C945A000C945A000C945A0074 S11300900C945A000C945A000C949B000C945A0033
S11300A011241FBECFEFCDBFDFE3DEBF0E94760079 S11300A011241FBECFEFCDBFDFE3DEBF0E94880067
S11300B00C9488000C940000E0E2F4E021E0258335 S11300B00C94B2000C940000E0E2F4E021E025830B
S11300C02183E0E6F8E06087BB27A92F982F872FCC S11300C02183E0E6F8E06087BB27A92F982F872FCC
S11300D0818783E0878380EC86830895E0E6F8E0F7 S11300D0818783E0878380EC86838581806885833C
S11300E0948195FFFDCF8093620808956CE675E0D6 S11300E00895E0E6F8E0948195FFFDCF80936208DF
S11300F080E090E00E945C00789488E60E946E00A4 S11300F00895CF93DF93EC018881882331F0219612
S113010025ED88E092E0215080409040E1F7F5CF62 S11301000E94710089918111FBCFDF91CF910895F5
S1070110F894FFCF8D S11301106CE675E080E090E00E945C00789488E6EC
S113012091E40E94790025ED88E092E0215080401E
S11301309040E1F7F4CF1F920F920FB60F92112463
S11301408F93EF93FF93E0E6F8E084818823ECF744
S113015080916008FF91EF918F910F900FBE0F90E7
S10B01601F901895F894FFCFDD
S1130168446574746520657220656E2074657374C3
S10501780A0077
S9030000FC S9030000FC
...@@ -15,33 +15,33 @@ ...@@ -15,33 +15,33 @@
/* /*
In this exercise we will set up and use UART communication. In this exercise we will set up and use UART communication.
The embedded debugger has a virtual com port that we will use to communicate with the computer. The embedded debugger has a virtual com port that we will use to communicate with the computer.
*/
*/ #define TX_PORT PORTB
#define TX_PIN 0
void uart_init(unsigned long baud){ void uart_init(unsigned long baud){
//From chapter 24.3 in datasheet //From chapter 22.3.1 in datasheet
PORTB.OUTSET = (1 << 0); //Setting up TX pin as output TX_PORT.OUTSET = (1 << TX_PIN); //Setting up TX pin as output
PORTB.DIRSET = (1 << 0); //Setting up TX pin as output TX_PORT.DIRSET = (1 << TX_PIN); //Setting up TX pin as output