
GccApplication1.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         0000000c  00800100  00000218  0000028c  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         00000218  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .comment      00000030  00000000  00000000  00000298  2**0
                  CONTENTS, READONLY
  3 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  000002c8  2**2
                  CONTENTS, READONLY
  4 .debug_aranges 00000088  00000000  00000000  00000308  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   00000d91  00000000  00000000  00000390  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 00000b49  00000000  00000000  00001121  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   00000601  00000000  00000000  00001c6a  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  000000cc  00000000  00000000  0000226c  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    0000054c  00000000  00000000  00002338  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_loc    000001f6  00000000  00000000  00002884  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_ranges 00000058  00000000  00000000  00002a7a  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 5a 00 	jmp	0xb4	; 0xb4 <__ctors_end>
   4:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
   8:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
   c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  10:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  14:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  18:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  1c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  20:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  24:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  28:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  2c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  30:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  34:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  38:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  3c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  40:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  44:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  48:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  4c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  50:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  54:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  58:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  5c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  60:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  64:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  68:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  6c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  70:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  74:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  78:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  7c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  80:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  84:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  88:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  8c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  90:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  94:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  98:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  9c:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  a0:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  a4:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  a8:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  ac:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>
  b0:	0c 94 77 00 	jmp	0xee	; 0xee <__bad_interrupt>

000000b4 <__ctors_end>:
  b4:	11 24       	eor	r1, r1
  b6:	1f be       	out	0x3f, r1	; 63
  b8:	cf ef       	ldi	r28, 0xFF	; 255
  ba:	d8 e0       	ldi	r29, 0x08	; 8
  bc:	de bf       	out	0x3e, r29	; 62
  be:	cd bf       	out	0x3d, r28	; 61

000000c0 <__do_copy_data>:
  c0:	11 e0       	ldi	r17, 0x01	; 1
  c2:	a0 e0       	ldi	r26, 0x00	; 0
  c4:	b1 e0       	ldi	r27, 0x01	; 1
  c6:	e8 e1       	ldi	r30, 0x18	; 24
  c8:	f2 e0       	ldi	r31, 0x02	; 2
  ca:	02 c0       	rjmp	.+4      	; 0xd0 <__do_copy_data+0x10>
  cc:	05 90       	lpm	r0, Z+
  ce:	0d 92       	st	X+, r0
  d0:	ac 30       	cpi	r26, 0x0C	; 12
  d2:	b1 07       	cpc	r27, r17
  d4:	d9 f7       	brne	.-10     	; 0xcc <__do_copy_data+0xc>

000000d6 <__do_clear_bss>:
  d6:	21 e0       	ldi	r18, 0x01	; 1
  d8:	ac e0       	ldi	r26, 0x0C	; 12
  da:	b1 e0       	ldi	r27, 0x01	; 1
  dc:	01 c0       	rjmp	.+2      	; 0xe0 <.do_clear_bss_start>

000000de <.do_clear_bss_loop>:
  de:	1d 92       	st	X+, r1

000000e0 <.do_clear_bss_start>:
  e0:	ac 30       	cpi	r26, 0x0C	; 12
  e2:	b2 07       	cpc	r27, r18
  e4:	e1 f7       	brne	.-8      	; 0xde <.do_clear_bss_loop>
  e6:	0e 94 8f 00 	call	0x11e	; 0x11e <main>
  ea:	0c 94 0a 01 	jmp	0x214	; 0x214 <_exit>

000000ee <__bad_interrupt>:
  ee:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

000000f2 <STMReset>:
		}
	}
}

 void STMReset() {
	DDRC |= (1 << PINC4);
  f2:	3c 9a       	sbi	0x07, 4	; 7
	PORTC &= ~(1 << PINC4);
  f4:	44 98       	cbi	0x08, 4	; 8
	#else
		//round up by default
		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
	#endif

	__builtin_avr_delay_cycles(__ticks_dc);
  f6:	2f ef       	ldi	r18, 0xFF	; 255
  f8:	81 ee       	ldi	r24, 0xE1	; 225
  fa:	94 e0       	ldi	r25, 0x04	; 4
  fc:	21 50       	subi	r18, 0x01	; 1
  fe:	80 40       	sbci	r24, 0x00	; 0
 100:	90 40       	sbci	r25, 0x00	; 0
 102:	e1 f7       	brne	.-8      	; 0xfc <STMReset+0xa>
 104:	00 c0       	rjmp	.+0      	; 0x106 <STMReset+0x14>
 106:	00 00       	nop
	_delay_ms(100);
	DDRC &= ~(1 << PINC4);
 108:	3c 98       	cbi	0x07, 4	; 7
 10a:	2f ef       	ldi	r18, 0xFF	; 255
 10c:	81 ee       	ldi	r24, 0xE1	; 225
 10e:	94 e0       	ldi	r25, 0x04	; 4
 110:	21 50       	subi	r18, 0x01	; 1
 112:	80 40       	sbci	r24, 0x00	; 0
 114:	90 40       	sbci	r25, 0x00	; 0
 116:	e1 f7       	brne	.-8      	; 0x110 <STMReset+0x1e>
 118:	00 c0       	rjmp	.+0      	; 0x11a <STMReset+0x28>
 11a:	00 00       	nop
 11c:	08 95       	ret

0000011e <main>:
	//bytes++;
	//PORTE = 0;
//}

int main(void)
{
 11e:	cf 93       	push	r28
 120:	df 93       	push	r29
 122:	cd b7       	in	r28, 0x3d	; 61
 124:	de b7       	in	r29, 0x3e	; 62
 126:	2c 97       	sbiw	r28, 0x0c	; 12
 128:	0f b6       	in	r0, 0x3f	; 63
 12a:	f8 94       	cli
 12c:	de bf       	out	0x3e, r29	; 62
 12e:	0f be       	out	0x3f, r0	; 63
 130:	cd bf       	out	0x3d, r28	; 61
	uint8_t data_to_send[] = {0x01, 0x4E, 0x20, 0x28, 0x01, 0x00, 0x01, 0x9C, 0x40, 0x28, 0x01, 0x01};
 132:	8c e0       	ldi	r24, 0x0C	; 12
 134:	e0 e0       	ldi	r30, 0x00	; 0
 136:	f1 e0       	ldi	r31, 0x01	; 1
 138:	de 01       	movw	r26, r28
 13a:	11 96       	adiw	r26, 0x01	; 1
 13c:	01 90       	ld	r0, Z+
 13e:	0d 92       	st	X+, r0
 140:	8a 95       	dec	r24
 142:	e1 f7       	brne	.-8      	; 0x13c <main+0x1e>
	DDRD = 3;  // USART PD0, PD1
 144:	83 e0       	ldi	r24, 0x03	; 3
 146:	8a b9       	out	0x0a, r24	; 10
	PORTD = 3;
 148:	8b b9       	out	0x0b, r24	; 11
	///////////////////////////////
	//STM NRST
	DDRC = 0;
 14a:	17 b8       	out	0x07, r1	; 7
	PORTC = 0;
 14c:	18 b8       	out	0x08, r1	; 8
	///////////////////////////////
	DDRE |= (1 << PORTE1);
 14e:	69 9a       	sbi	0x0d, 1	; 13
	DDRE &= ~(1 << PORTE2);
 150:	6a 98       	cbi	0x0d, 2	; 13
	PORTE &= ~(1 << PORTE2);
 152:	72 98       	cbi	0x0e, 2	; 14
	//PORTE = 2;
	
    USART_Init(8);  // установка скорости 115200: (16 000 000 / (16 * 115 200) ) - 1, U2X = 0
 154:	88 e0       	ldi	r24, 0x08	; 8
 156:	90 e0       	ldi	r25, 0x00	; 0
 158:	0e 94 f7 00 	call	0x1ee	; 0x1ee <USART_Init>
    sei();
 15c:	78 94       	sei
	
	// -----SPI-----
	SPI_MasterInit();
 15e:	0e 94 d4 00 	call	0x1a8	; 0x1a8 <SPI_MasterInit>
 162:	6e 01       	movw	r12, r28
 164:	2d e0       	ldi	r18, 0x0D	; 13
 166:	c2 0e       	add	r12, r18
 168:	d1 1c       	adc	r13, r1
		//PORTE &= ~(1 << PORTE1); // STATUS выкл
		//for (uint8_t i = 0; i < 12; i++) {
			//USART_Transmit(data_to_send[i]);
		//}
			// $05$4E$20$28$01$00$03$9C$40$28$01$01
		STMReset();
 16a:	0e 94 79 00 	call	0xf2	; 0xf2 <STMReset>
		//_delay_ms(100);
		//PORTE &= ~(1 << PORTE1); // STATUS выкл
		//
		//PORTE |= (1 << PORTE1);  // STATUS вкл
			
		if ((PINC)&(1<<PORTC3)) {  // STM готов к приему
 16e:	33 9b       	sbis	0x06, 3	; 6
 170:	fc cf       	rjmp	.-8      	; 0x16a <main+0x4c>
			 PORTE |= (1 << PORTE1);  // STATUS вкл
 172:	71 9a       	sbi	0x0e, 1	; 14
 174:	8f ef       	ldi	r24, 0xFF	; 255
 176:	93 ed       	ldi	r25, 0xD3	; 211
 178:	e0 e3       	ldi	r30, 0x30	; 48
 17a:	81 50       	subi	r24, 0x01	; 1
 17c:	90 40       	sbci	r25, 0x00	; 0
 17e:	e0 40       	sbci	r30, 0x00	; 0
 180:	e1 f7       	brne	.-8      	; 0x17a <main+0x5c>
 182:	00 c0       	rjmp	.+0      	; 0x184 <main+0x66>
 184:	00 00       	nop
 186:	8e 01       	movw	r16, r28
 188:	0f 5f       	subi	r16, 0xFF	; 255
 18a:	1f 4f       	sbci	r17, 0xFF	; 255
			 _delay_ms(1000);
			for (int i = 0; i < 12; i++) {
				USART_Transmit(data_to_send[i]);
 18c:	f8 01       	movw	r30, r16
 18e:	f1 90       	ld	r15, Z+
 190:	8f 01       	movw	r16, r30
 192:	8f 2d       	mov	r24, r15
 194:	0e 94 02 01 	call	0x204	; 0x204 <USART_Transmit>
				SPI_MasterTransmit(data_to_send[i]);
 198:	8f 2d       	mov	r24, r15
 19a:	0e 94 de 00 	call	0x1bc	; 0x1bc <SPI_MasterTransmit>
		//PORTE |= (1 << PORTE1);  // STATUS вкл
			
		if ((PINC)&(1<<PORTC3)) {  // STM готов к приему
			 PORTE |= (1 << PORTE1);  // STATUS вкл
			 _delay_ms(1000);
			for (int i = 0; i < 12; i++) {
 19e:	0c 15       	cp	r16, r12
 1a0:	1d 05       	cpc	r17, r13
 1a2:	a1 f7       	brne	.-24     	; 0x18c <main+0x6e>
				USART_Transmit(data_to_send[i]);
				SPI_MasterTransmit(data_to_send[i]);
			}
			 PORTE &= ~(1 << PORTE1); // STATUS выкл
 1a4:	71 98       	cbi	0x0e, 1	; 14
 1a6:	e1 cf       	rjmp	.-62     	; 0x16a <main+0x4c>

000001a8 <SPI_MasterInit>:
 */ 
#include "spi.h"

void SPI_MasterInit(void) {
	 // Настройка пина SS (PB2) как выхода
	DDRE |= (1 << PORTE2);
 1a8:	6a 9a       	sbi	0x0d, 2	; 13
	 
	 // Установка SS в высокое состояние (неактивный)
	PORTE |= (1 << PORTE2);
 1aa:	72 9a       	sbi	0x0e, 2	; 14
	/* Set MOSI, SS and SCK output */
	DDRE |= (1 << MOSI);
 1ac:	6b 9a       	sbi	0x0d, 3	; 13
	DDRC |= (1 << SCK) | (1 << SS);
 1ae:	87 b1       	in	r24, 0x07	; 7
 1b0:	86 60       	ori	r24, 0x06	; 6
 1b2:	87 b9       	out	0x07, r24	; 7
	
	/* Enable SPI, Master */
	SPCR1 = (1 << SPE1) | (1 << MSTR1);
 1b4:	80 e5       	ldi	r24, 0x50	; 80
 1b6:	80 93 ac 00 	sts	0x00AC, r24	; 0x8000ac <__TEXT_REGION_LENGTH__+0x7f80ac>
 1ba:	08 95       	ret

000001bc <SPI_MasterTransmit>:
}

void SPI_MasterTransmit(uint8_t data) {
	PORTC &= ~(1 << PORTC2);  // начало передачи - низкий уровень
 1bc:	42 98       	cbi	0x08, 2	; 8
	SPDR1 = data;
 1be:	80 93 ae 00 	sts	0x00AE, r24	; 0x8000ae <__TEXT_REGION_LENGTH__+0x7f80ae>
	while(!(SPSR1 & (1<<SPIF1))) {
 1c2:	80 91 ad 00 	lds	r24, 0x00AD	; 0x8000ad <__TEXT_REGION_LENGTH__+0x7f80ad>
 1c6:	88 23       	and	r24, r24
 1c8:	84 f0       	brlt	.+32     	; 0x1ea <SPI_MasterTransmit+0x2e>
 1ca:	ed ea       	ldi	r30, 0xAD	; 173
 1cc:	f0 e0       	ldi	r31, 0x00	; 0
		PORTE |= (1 << PORTE1);  // STATUS вкл
 1ce:	71 9a       	sbi	0x0e, 1	; 14
 1d0:	2f ef       	ldi	r18, 0xFF	; 255
 1d2:	81 ee       	ldi	r24, 0xE1	; 225
 1d4:	94 e0       	ldi	r25, 0x04	; 4
 1d6:	21 50       	subi	r18, 0x01	; 1
 1d8:	80 40       	sbci	r24, 0x00	; 0
 1da:	90 40       	sbci	r25, 0x00	; 0
 1dc:	e1 f7       	brne	.-8      	; 0x1d6 <SPI_MasterTransmit+0x1a>
 1de:	00 c0       	rjmp	.+0      	; 0x1e0 <SPI_MasterTransmit+0x24>
 1e0:	00 00       	nop
	    _delay_ms(100);
		PORTE &= ~(1 << PORTE1); // STATUS выкл
 1e2:	71 98       	cbi	0x0e, 1	; 14
}

void SPI_MasterTransmit(uint8_t data) {
	PORTC &= ~(1 << PORTC2);  // начало передачи - низкий уровень
	SPDR1 = data;
	while(!(SPSR1 & (1<<SPIF1))) {
 1e4:	80 81       	ld	r24, Z
 1e6:	88 23       	and	r24, r24
 1e8:	94 f7       	brge	.-28     	; 0x1ce <SPI_MasterTransmit+0x12>
		PORTE |= (1 << PORTE1);  // STATUS вкл
	    _delay_ms(100);
		PORTE &= ~(1 << PORTE1); // STATUS выкл
	}
	PORTC |= (1 << PORTC2);  // конец передачи - высокий уровень  
 1ea:	42 9a       	sbi	0x08, 2	; 8
 1ec:	08 95       	ret

000001ee <USART_Init>:

#include "usart0.h"

void USART_Init (uint16_t speed) {
	// Ст. и мл. скорость
	UBRR0H = 0;
 1ee:	10 92 c5 00 	sts	0x00C5, r1	; 0x8000c5 <__TEXT_REGION_LENGTH__+0x7f80c5>
	UBRR0L = (uint8_t)(speed);
 1f2:	80 93 c4 00 	sts	0x00C4, r24	; 0x8000c4 <__TEXT_REGION_LENGTH__+0x7f80c4>
	// Прерывания при приеме, вкл прием/передача
	UCSR0B =  (1 << RXEN0) | (1 << TXEN0);
 1f6:	88 e1       	ldi	r24, 0x18	; 24
 1f8:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7f80c1>
	// 8 бит данных, 2 стоп-бита
	UCSR0C = (1<<USBS0) | (3<<UCSZ00);
 1fc:	8e e0       	ldi	r24, 0x0E	; 14
 1fe:	80 93 c2 00 	sts	0x00C2, r24	; 0x8000c2 <__TEXT_REGION_LENGTH__+0x7f80c2>
 202:	08 95       	ret

00000204 <USART_Transmit>:
}

void USART_Transmit (uint8_t data) {
	while (!(UCSR0A & (1<<UDRE0)));  // Ожидание конца передачи
 204:	e0 ec       	ldi	r30, 0xC0	; 192
 206:	f0 e0       	ldi	r31, 0x00	; 0
 208:	90 81       	ld	r25, Z
 20a:	95 ff       	sbrs	r25, 5
 20c:	fd cf       	rjmp	.-6      	; 0x208 <USART_Transmit+0x4>
	UDR0 = data;  // Начало передачи
 20e:	80 93 c6 00 	sts	0x00C6, r24	; 0x8000c6 <__TEXT_REGION_LENGTH__+0x7f80c6>
 212:	08 95       	ret

00000214 <_exit>:
 214:	f8 94       	cli

00000216 <__stop_program>:
 216:	ff cf       	rjmp	.-2      	; 0x216 <__stop_program>
