From 7658cd2db506f5d6ad289c77ca5878e7c9da6078 Mon Sep 17 00:00:00 2001 From: stud130312 Date: Mon, 12 Feb 2024 11:46:28 +0300 Subject: [PATCH] end --- SPI/SPI-Master/SPI-Master.ino | 39 ++- SPI/slave/slave.ino | 298 ++++++++++++++++++++++- SPI/slave/slave.rar | Bin 0 -> 3889 bytes SPI_/SPI_.atsln | 20 ++ SPI_/SPI_.atsuo | Bin 0 -> 12288 bytes SPI_/SPI_/Debug/Makefile | 136 +++++++++++ SPI_/SPI_/Debug/SPIMaster.d | 45 ++++ SPI_/SPI_/Debug/SPIMaster.o | Bin 0 -> 6472 bytes SPI_/SPI_/Debug/SPI_.d | 37 +++ SPI_/SPI_/Debug/SPI_.eep | 1 + SPI_/SPI_/Debug/SPI_.elf | Bin 0 -> 6765 bytes SPI_/SPI_/Debug/SPI_.hex | 23 ++ SPI_/SPI_/Debug/SPI_.lss | 277 +++++++++++++++++++++ SPI_/SPI_/Debug/SPI_.map | 446 ++++++++++++++++++++++++++++++++++ SPI_/SPI_/Debug/SPI_.o | Bin 0 -> 5076 bytes SPI_/SPI_/Debug/SPI_.srec | 24 ++ SPI_/SPI_/Debug/makedep.mk | 8 + SPI_/SPI_/SPIMaster.c | 65 +++++ SPI_/SPI_/SPIMaster.h | 30 +++ SPI_/SPI_/SPI_.c | 70 ++++++ SPI_/SPI_/SPI_.cproj | 110 +++++++++ 21 files changed, 1616 insertions(+), 13 deletions(-) create mode 100644 SPI/slave/slave.rar create mode 100644 SPI_/SPI_.atsln create mode 100644 SPI_/SPI_.atsuo create mode 100644 SPI_/SPI_/Debug/Makefile create mode 100644 SPI_/SPI_/Debug/SPIMaster.d create mode 100644 SPI_/SPI_/Debug/SPIMaster.o create mode 100644 SPI_/SPI_/Debug/SPI_.d create mode 100644 SPI_/SPI_/Debug/SPI_.eep create mode 100644 SPI_/SPI_/Debug/SPI_.elf create mode 100644 SPI_/SPI_/Debug/SPI_.hex create mode 100644 SPI_/SPI_/Debug/SPI_.lss create mode 100644 SPI_/SPI_/Debug/SPI_.map create mode 100644 SPI_/SPI_/Debug/SPI_.o create mode 100644 SPI_/SPI_/Debug/SPI_.srec create mode 100644 SPI_/SPI_/Debug/makedep.mk create mode 100644 SPI_/SPI_/SPIMaster.c create mode 100644 SPI_/SPI_/SPIMaster.h create mode 100644 SPI_/SPI_/SPI_.c create mode 100644 SPI_/SPI_/SPI_.cproj diff --git a/SPI/SPI-Master/SPI-Master.ino b/SPI/SPI-Master/SPI-Master.ino index 4fb81b9..d80c62c 100644 --- a/SPI/SPI-Master/SPI-Master.ino +++ b/SPI/SPI-Master/SPI-Master.ino @@ -17,7 +17,42 @@ void setup() void loop() { - char data[] = {0x06, 0xF1, 0x04, 0x05, 0x16, 0x12, 0x18, 0x11, 0x00, 0x15, 0x49, 0x50, 0x59, 0x69, 0}; + // All clear + // 0x00 - черный, остальное белое + // char data[] = {0x01, 0x00, 0}; + + // Setpage 1 + // 0x00 - 0x07 + // char data[] = {0x02, 0x01, 0}; + + // Add symbol + // char data[] = {0x03, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0F, 0}; + + // Delete symbol + // Кол-во символов + // char data[] = {0x04, 0x04, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0}; + + // Draw Pixel + // x, y, color + // char data[] = {0x05, 0x15, 0x15, 0x01, 0}; + + // Draw Line + // x1, y1, x2, y2, color + // char data[] = {0x06, 0x15, 0x15, 0x45, 0x45, 0x01, 0}; + + // Draw Circle + // x, y, r, color, fill + // char data[] = {0x07, 0x15, 0x15, 0x15, 0x01, 0x00, 0}; + + // Draw Rectangle + // x, y, width, height, color, fill + // char data[] = {0x08, 0x15, 0x15, 0x25, 0x25, 0x01, 0x00, 0}; + + // Draw Char + // x, y, charIndex, fill + // char data[] = {0x09, 0x15, 0x15, 0x05, 0x00, 0}; + + char data[] = {0x01, 0x00, 0}; int length = sizeof(data); Serial.println(); Serial.print("Start: "); @@ -34,5 +69,5 @@ void loop() Serial.println(); SPI_MasterTransmit(data, length); - _delay_ms(1000); + _delay_ms(5000); } \ No newline at end of file diff --git a/SPI/slave/slave.ino b/SPI/slave/slave.ino index ea1744d..641cb12 100644 --- a/SPI/slave/slave.ino +++ b/SPI/slave/slave.ino @@ -1,6 +1,8 @@ -// #include -// #include + #include "SPISlave.h" +// #include +#include +GyverOLED oled; #define DDR_SPI DDRB #define DD_MOSI PB3 @@ -8,6 +10,7 @@ #define DD_SCK PB5 #define DD_SS PB2 + // GyverOLED oled; static int index = 0; @@ -20,6 +23,183 @@ static char data[64]; // SPCR = (1 << SPE) | (1 << SPIE); // } +// biblary + + +// внутренние константы +#define OLED_WIDTH 128 +#define OLED_HEIGHT_64 0x12 +#define OLED_64 0x3F +#define OLED_32 0x1F + +#define OLED_DISPLAY_OFF 0xAE +#define OLED_DISPLAY_ON 0xAF + +#define OLED_COMMAND_MODE 0x00 +#define OLED_ONE_COMMAND_MODE 0x80 +#define OLED_DATA_MODE 0x40 +#define OLED_ONE_DATA_MODE 0xC0 + +#define OLED_ADDRESSING_MODE 0x20 +#define OLED_HORIZONTAL 0x00 +#define OLED_VERTICAL 0x01 + +#define OLED_NORMAL_V 0xC8 +#define OLED_FLIP_V 0xC0 +#define OLED_NORMAL_H 0xA1 +#define OLED_FLIP_H 0xA0 + +#define OLED_CONTRAST 0x81 +#define OLED_SETCOMPINS 0xDA +#define OLED_SETVCOMDETECT 0xDB +#define OLED_CLOCKDIV 0xD5 +#define OLED_SETMULTIPLEX 0xA8 +#define OLED_COLUMNADDR 0x21 +#define OLED_PAGEADDR 0x22 +#define OLED_CHARGEPUMP 0x8D + +#define OLED_NORMALDISPLAY 0xA6 +#define OLED_INVERTDISPLAY 0xA7 + +#define BUFSIZE_128x64 (128*64/8) + +#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 64 + +#define OLED_ADDR 0x3C + +const uint8_t _maxRow = 7; +const uint8_t _maxY = SCREEN_HEIGHT - 1; +const uint8_t _maxX = SCREEN_WIDTH - 1; + +// ========== I2C ========== +#define I2C_FREQ 100000UL + +void i2c_begin(uint8_t address) +{ + TWBR = ((F_CPU / I2C_FREQ) - 16) / 2; // Расчет предделителя для заданной частоты + TWAR = (address << 1); // Установка адреса устройства +} + +void i2c_endTransaction() +{ + TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO); // Отправка условия STOP +} + +void i2c_beginTransmission(uint8_t address) +{ + TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); // Отправка условия START + while (!(TWCR & (1 << TWINT))); // Ожидание завершения START + + TWDR = (address << 1); // Отправка адреса устройства + TWCR = (1 << TWINT) | (1 << TWEN); // Отправка адреса + while (!(TWCR & (1 << TWINT))); // Ожидание завершения передачи адреса +} + +void i2c_write(uint8_t data) +{ + TWDR = data; // Запись данных + TWCR = (1 << TWINT) | (1 << TWEN); // Отправка данных + while (!(TWCR & (1 << TWINT))); // Ожидание завершения передачи данных +} + +// ========== Sender ========== + + +uint8_t _writes = 0; + +void sendData(uint8_t data) { + sendByteRaw(data); + _writes++; + if (_writes >= 16) { + endTransm(); + beginData(); + } +} + +void sendByteRaw(uint8_t data) { + i2c_write(data); +} +void sendCommand(uint8_t cmd1) { + beginOneCommand(); + sendByteRaw(cmd1); + endTransm(); +} + +void sendCommand(uint8_t cmd1, uint8_t cmd2) { + beginCommand(); + sendByteRaw(cmd1); + sendByteRaw(cmd2); + endTransm(); +} + +void setWindow(int x0, int y0, int x1, int y1) { + beginCommand(); + sendByteRaw(OLED_COLUMNADDR); + sendByteRaw(constrain(x0, 0, _maxX)); + sendByteRaw(constrain(x1, 0, _maxX)); + sendByteRaw(OLED_PAGEADDR); + sendByteRaw(constrain(y0, 0, _maxRow)); + sendByteRaw(constrain(y1, 0, _maxRow)); + endTransm(); +} + +void beginData() { + startTransm(); + sendByteRaw(OLED_DATA_MODE); +} + +void beginCommand() { + startTransm(); + sendByteRaw(OLED_COMMAND_MODE); +} + +void beginOneCommand() { + startTransm(); + sendByteRaw(OLED_ONE_COMMAND_MODE); +} + +void endTransm() { + i2c_endTransaction(); + _writes = 0; +} +void startTransm() { + i2c_beginTransmission(OLED_ADDR); +} + +void oled_init(){ + i2c_begin(OLED_ADDR); + beginCommand(); + + // 15 + sendData(OLED_DISPLAY_OFF); + sendData(OLED_CLOCKDIV); + sendData(0x80); + sendData(OLED_CHARGEPUMP); + sendData(0x14); + sendData(OLED_ADDRESSING_MODE); + sendData(OLED_VERTICAL); + sendData(OLED_NORMAL_H); + sendData(OLED_NORMAL_V); + sendData(OLED_CONTRAST); + sendData(0x7F); + sendData(OLED_SETVCOMDETECT); + sendData(0x40); + sendData(OLED_NORMALDISPLAY); + sendData(OLED_DISPLAY_ON); + // 15 + + endTransm(); + beginCommand(); + sendData(OLED_SETCOMPINS); + sendData(OLED_HEIGHT_64); + sendData(OLED_SETMULTIPLEX); + sendData(OLED_64); + endTransm(); +} + + + ISR(SPI_STC_vect) { char received = SPDR; @@ -31,6 +211,11 @@ void setup() { Serial.begin(9600); SPI_SlaveInit(); + + oled_init(); + oled.fill(0); + oled.setScale(3); + oled.home(); Serial.println(); Serial.println("Initialization "); @@ -40,19 +225,44 @@ void SetCommand(char *data2, int length){ char command = data2[0]; // Отрезать 1 элемент от оставшихся - Serial.print("\nReceived command: "); Serial.println(command, HEX); switch (command){ - case 6: - AddSymbol(&data2[1], length-1); - break; + case 1: + AllClear(&data2[1], length-1); + break; + case 2: + SetPage(&data2[1], length-1); + break; + + // case 6: + // PrintMassive(&data2[1], length-1); + // break; + case 4: + AddSymbol(&data2[1], length-1); + break; + case 5: + DelSymbol(&data2[1], length-1); + break; + case 6: + DrawPixel(&data2[1], length-1); + PrintMassive(&data2[1], length-1); + break; + case 7: + DrawLine(&data2[1], length-1); + break; + case 8: + DrawCircle(&data2[1], length-1); + break; + case 9: + DrawRectangle(&data2[1], length-1); + break; } } -void AddSymbol(uint8_t *symbols, int lenght){ +void PrintMassive(uint8_t *symbols, int lenght){ Serial.print("Received Add: "); // oled.setScale(3); // масштаб текста (1..4) @@ -66,6 +276,75 @@ void AddSymbol(uint8_t *symbols, int lenght){ } } +// Another +// command 1 +void AllClear(char *symbols, int lenght){ + int param = symbols[0]; + if (param == 1){ + oled.fill(0); + } + else{ + oled.fill(255); + } + } + +// command 2 +void SetPage(char *symbols, int lenght){ + int x = symbols[0]; + int y = symbols[1]; + oled.setCursor(x,y); + } + +// command 4 +void AddSymbol(char *symbols, int lenght) { + for (int i = 0; i < lenght - 1; i++) { + oled.print(symbols[i]); + } +} + +// command 5 +void DelSymbol(char *symbols, int lenght) { + for (int i = 0; i < lenght - 1; i++) { + oled.print(symbols[i]); + } +} + +// command 6 +void DrawPixel(char *symbols, int lenght){ + int x = symbols[0]; + int y = symbols[1]; + int color = symbols[2]; + oled.dot(x,y,color); +} + +// command 7 +void DrawLine(char *symbols, int lenght){ + int x = symbols[0]; + int y = symbols[1]; + int x1 = symbols[2]; + int y1 = symbols[3]; + int color = symbols[4]; + oled.line(x,y,x1,y1,color); +} + +// command 8 +void DrawCircle(char *symbols, int lenght){ + int x = symbols[0]; + int y = symbols[1]; + int r = symbols[2]; + int color = symbols[3]; + oled.circle(x,y,r,color); +} + +// command 9 +void DrawRectangle(char *symbols, int lenght){ + int x = symbols[0]; + int y = symbols[1]; + int x1 = symbols[2]; + int y1 = symbols[3]; + int color = symbols[4]; + oled.rect(x,y,x1,y1,color); +} // Функция для вычисления контрольной суммы XOR // char CRC8(char *data, int length) { @@ -128,12 +407,9 @@ void loop() { Serial.println(); Serial.println("Старт вывода массивов"); Serial.println(sum, HEX); - // checkNull = checkArray(data, index); - // if(checkNull == 1){ - - // } SetCommand(data, index); + // oled.print(data[0]); Serial.println("Стоп вывода массивов"); index = 0; return; diff --git a/SPI/slave/slave.rar b/SPI/slave/slave.rar new file mode 100644 index 0000000000000000000000000000000000000000..39ee714ed6986c297a1d438606fdd6ca2d2136b7 GIT binary patch literal 3889 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 "SPI_.lss" + "E:\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "SPI_.elf" "SPI_.srec" + "E:\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-size.exe" "SPI_.elf" + + + + + + + +# Other Targets +clean: + -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) + -$(RM) $(C_DEPS_AS_ARGS) + rm -rf "SPI_.elf" "SPI_.a" "SPI_.hex" "SPI_.lss" "SPI_.eep" "SPI_.map" "SPI_.srec" "SPI_.usersignatures" + \ No newline at end of file diff --git a/SPI_/SPI_/Debug/SPIMaster.d b/SPI_/SPI_/Debug/SPIMaster.d new file mode 100644 index 0000000..fb6b93e --- /dev/null +++ b/SPI_/SPI_/Debug/SPIMaster.d @@ -0,0 +1,45 @@ +SPIMaster.d SPIMaster.o: .././SPIMaster.c .././SPIMaster.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iom328p.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\util\delay.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\math.h + +.././SPIMaster.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iom328p.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\util\delay.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +e:\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\math.h: diff --git a/SPI_/SPI_/Debug/SPIMaster.o b/SPI_/SPI_/Debug/SPIMaster.o new file mode 100644 index 0000000000000000000000000000000000000000..01f753d0b5a7837329535fcfb84b545a3355e849 GIT binary patch literal 6472 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 YW7F(^b literal 0 HcmV?d00001 diff --git a/SPI_/SPI_/Debug/SPI_.hex b/SPI_/SPI_/Debug/SPI_.hex new file mode 100644 index 0000000..e128318 --- /dev/null +++ b/SPI_/SPI_/Debug/SPI_.hex @@ -0,0 +1,23 @@ +:100000000C9434000C9449000C9449000C94490061 +:100010000C9449000C9449000C9449000C9449003C +:100020000C9449000C9449000C9449000C9449002C +:100030000C9449000C9449000C9449000C9449001C +:100040000C9449000C9449000C9449000C9449000C +:100050000C9449000C9449000C9449000C944900FC +:100060000C9449000C94490011241FBECFEFD8E036 +:10007000DEBFCDBF11E0A0E0B1E0E6E4F1E002C0F8 +:1000800005900D92A031B107D9F70E947D000C9424 +:10009000A1000C9400008CE284B9229A82E58CBD08 +:1000A00008952A98161617065CF4FC01860F971F10 +:1000B00021912EBD0DB407FEFDCFE817F907C1F75A +:1000C0002A9A0895FC01680F791F80E058E040E00B +:1000D00097E00FC021918227252F342F88231CF40D +:1000E000880F892701C0880F21503109211531055A +:1000F000A9F7E617F70771F70895CF93DF93CDB708 +:10010000DEB72F970FB6F894DEBF0FBECDBF0E94AB +:100110004B001FE0E0E0F1E0DE011196812F01903D +:100120000D928A95E1F76EE070E0CE0101960E9493 +:1001300062008F876FE070E0CE0101960E9451004F +:06014000E9CFF894FFCFA7 +:1001460004110405161218110015495059690000CA +:00000001FF diff --git a/SPI_/SPI_/Debug/SPI_.lss b/SPI_/SPI_/Debug/SPI_.lss new file mode 100644 index 0000000..315ffe4 --- /dev/null +++ b/SPI_/SPI_/Debug/SPI_.lss @@ -0,0 +1,277 @@ + +SPI_.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .data 00000010 00800100 00000146 000001ba 2**0 + CONTENTS, ALLOC, LOAD, DATA + 1 .text 00000146 00000000 00000000 00000074 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .comment 00000030 00000000 00000000 000001ca 2**0 + CONTENTS, READONLY + 3 .debug_aranges 00000068 00000000 00000000 000001fa 2**0 + CONTENTS, READONLY, DEBUGGING + 4 .debug_info 0000039a 00000000 00000000 00000262 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .debug_abbrev 00000275 00000000 00000000 000005fc 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_line 00000173 00000000 00000000 00000871 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_frame 000000a8 00000000 00000000 000009e4 2**2 + CONTENTS, READONLY, DEBUGGING + 8 .debug_str 000001ac 00000000 00000000 00000a8c 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_loc 00000303 00000000 00000000 00000c38 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_ranges 00000090 00000000 00000000 00000f3b 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00000000 <__vectors>: + 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end> + 4: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 8: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + c: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 10: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 14: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 18: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 1c: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 20: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 24: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 28: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 2c: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 30: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 34: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 38: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 3c: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 40: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 44: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 48: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 4c: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 50: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 54: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 58: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 5c: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 60: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + 64: 0c 94 49 00 jmp 0x92 ; 0x92 <__bad_interrupt> + +00000068 <__ctors_end>: + 68: 11 24 eor r1, r1 + 6a: 1f be out 0x3f, r1 ; 63 + 6c: cf ef ldi r28, 0xFF ; 255 + 6e: d8 e0 ldi r29, 0x08 ; 8 + 70: de bf out 0x3e, r29 ; 62 + 72: cd bf out 0x3d, r28 ; 61 + +00000074 <__do_copy_data>: + 74: 11 e0 ldi r17, 0x01 ; 1 + 76: a0 e0 ldi r26, 0x00 ; 0 + 78: b1 e0 ldi r27, 0x01 ; 1 + 7a: e6 e4 ldi r30, 0x46 ; 70 + 7c: f1 e0 ldi r31, 0x01 ; 1 + 7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10> + 80: 05 90 lpm r0, Z+ + 82: 0d 92 st X+, r0 + 84: a0 31 cpi r26, 0x10 ; 16 + 86: b1 07 cpc r27, r17 + 88: d9 f7 brne .-10 ; 0x80 <__do_copy_data+0xc> + 8a: 0e 94 7d 00 call 0xfa ; 0xfa
+ 8e: 0c 94 a1 00 jmp 0x142 ; 0x142 <_exit> + +00000092 <__bad_interrupt>: + 92: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + +00000096 : +#include +#include + +void SPI_MasterInit(void) +{ + DDR_SPI = (1 << DD_MOSI) | (1 << DD_SCK) | (1 << DD_SS); + 96: 8c e2 ldi r24, 0x2C ; 44 + 98: 84 b9 out 0x04, r24 ; 4 + DDRB |= (1<: + // SPCR = (1 << SPE) | (1 << MSTR) ; +} + +void SPI_MasterTransmit(char *data, int length) +{ + PORTB &= ~(1<<2); + a2: 2a 98 cbi 0x05, 2 ; 5 + + for(int i = 0; i < length; i++) { + a4: 16 16 cp r1, r22 + a6: 17 06 cpc r1, r23 + a8: 5c f4 brge .+22 ; 0xc0 + aa: fc 01 movw r30, r24 + ac: 86 0f add r24, r22 + ae: 97 1f adc r25, r23 + SPDR = data[i]; // + b0: 21 91 ld r18, Z+ + b2: 2e bd out 0x2e, r18 ; 46 + while (!(SPSR & (1 << SPIF))); // , + b4: 0d b4 in r0, 0x2d ; 45 + b6: 07 fe sbrs r0, 7 + b8: fd cf rjmp .-6 ; 0xb4 + +void SPI_MasterTransmit(char *data, int length) +{ + PORTB &= ~(1<<2); + + for(int i = 0; i < length; i++) { + ba: e8 17 cp r30, r24 + bc: f9 07 cpc r31, r25 + be: c1 f7 brne .-16 ; 0xb0 + SPDR = data[i]; // + while (!(SPSR & (1 << SPIF))); // , + } + + PORTB |= (1<<2); + c0: 2a 9a sbi 0x05, 2 ; 5 + c2: 08 95 ret + +000000c4 : + } + + return crc; +} + +char crc8(char *data, int len) { + c4: fc 01 movw r30, r24 + c6: 68 0f add r22, r24 + c8: 79 1f adc r23, r25 + char crc = 0x00; + ca: 80 e0 ldi r24, 0x00 ; 0 + while (len--) { + crc ^= *data++; + cc: 58 e0 ldi r21, 0x08 ; 8 + ce: 40 e0 ldi r20, 0x00 ; 0 + for (int i = 0; i < 8; i++) { + if (crc & 0x80) { + crc = (crc << 1) ^ 0x07; + d0: 97 e0 ldi r25, 0x07 ; 7 + return crc; +} + +char crc8(char *data, int len) { + char crc = 0x00; + while (len--) { + d2: 0f c0 rjmp .+30 ; 0xf2 + crc ^= *data++; + d4: 21 91 ld r18, Z+ + d6: 82 27 eor r24, r18 + d8: 25 2f mov r18, r21 + da: 34 2f mov r19, r20 + for (int i = 0; i < 8; i++) { + if (crc & 0x80) { + dc: 88 23 and r24, r24 + de: 1c f4 brge .+6 ; 0xe6 + crc = (crc << 1) ^ 0x07; + e0: 88 0f add r24, r24 + e2: 89 27 eor r24, r25 + e4: 01 c0 rjmp .+2 ; 0xe8 + } else { + crc <<= 1; + e6: 88 0f add r24, r24 + e8: 21 50 subi r18, 0x01 ; 1 + ea: 31 09 sbc r19, r1 + +char crc8(char *data, int len) { + char crc = 0x00; + while (len--) { + crc ^= *data++; + for (int i = 0; i < 8; i++) { + ec: 21 15 cp r18, r1 + ee: 31 05 cpc r19, r1 + f0: a9 f7 brne .-22 ; 0xdc + return crc; +} + +char crc8(char *data, int len) { + char crc = 0x00; + while (len--) { + f2: e6 17 cp r30, r22 + f4: f7 07 cpc r31, r23 + f6: 71 f7 brne .-36 ; 0xd4 + crc <<= 1; + } + } + } + return crc; +} + f8: 08 95 ret + +000000fa
: + +} + + +int main(void) +{ + fa: cf 93 push r28 + fc: df 93 push r29 + fe: cd b7 in r28, 0x3d ; 61 + 100: de b7 in r29, 0x3e ; 62 + 102: 2f 97 sbiw r28, 0x0f ; 15 + 104: 0f b6 in r0, 0x3f ; 63 + 106: f8 94 cli + 108: de bf out 0x3e, r29 ; 62 + 10a: 0f be out 0x3f, r0 ; 63 + 10c: cd bf out 0x3d, r28 ; 61 + // Serial.begin(9600); + SPI_MasterInit(); + 10e: 0e 94 4b 00 call 0x96 ; 0x96 + // Serial.println("Master Initialization "); + while(1) + { + char data[] = {0x04, 0x11, 0x04, 0x05, 0x16, 0x12, 0x18, 0x11, 0x00, 0x15, 0x49, 0x50, 0x59, 0x69, 0}; + 112: 1f e0 ldi r17, 0x0F ; 15 + 114: e0 e0 ldi r30, 0x00 ; 0 + 116: f1 e0 ldi r31, 0x01 ; 1 + 118: de 01 movw r26, r28 + 11a: 11 96 adiw r26, 0x01 ; 1 + 11c: 81 2f mov r24, r17 + 11e: 01 90 ld r0, Z+ + 120: 0d 92 st X+, r0 + 122: 8a 95 dec r24 + 124: e1 f7 brne .-8 ; 0x11e + // Serial.println(); + // Serial.print("Start: "); + // Print(data, length); + // Serial.println(); + + char checking = crc8(data, length-1); + 126: 6e e0 ldi r22, 0x0E ; 14 + 128: 70 e0 ldi r23, 0x00 ; 0 + 12a: ce 01 movw r24, r28 + 12c: 01 96 adiw r24, 0x01 ; 1 + 12e: 0e 94 62 00 call 0xc4 ; 0xc4 + int size = sizeof(data) / sizeof(data[0]); + data[size - 1] = checking; + 132: 8f 87 std Y+15, r24 ; 0x0f + + // Serial.print("End: "); + // Print(data, length); + // Serial.println(); + + SPI_MasterTransmit(data, length); + 134: 6f e0 ldi r22, 0x0F ; 15 + 136: 70 e0 ldi r23, 0x00 ; 0 + 138: ce 01 movw r24, r28 + 13a: 01 96 adiw r24, 0x01 ; 1 + 13c: 0e 94 51 00 call 0xa2 ; 0xa2 + 140: e9 cf rjmp .-46 ; 0x114 + +00000142 <_exit>: + 142: f8 94 cli + +00000144 <__stop_program>: + 144: ff cf rjmp .-2 ; 0x144 <__stop_program> diff --git a/SPI_/SPI_/Debug/SPI_.map b/SPI_/SPI_/Debug/SPI_.map new file mode 100644 index 0000000..eb39d93 --- /dev/null +++ b/SPI_/SPI_/Debug/SPI_.map @@ -0,0 +1,446 @@ +Archive member included because of file (symbol) + +e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o (exit) +e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + SPI_.o (__do_copy_data) + +Discarded input sections + + .data 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + .bss 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + .text 0x00000000 0x0 SPIMaster.o + .data 0x00000000 0x0 SPIMaster.o + .bss 0x00000000 0x0 SPIMaster.o + .text.CRC8 0x00000000 0x44 SPIMaster.o + .text 0x00000000 0x0 SPI_.o + .data 0x00000000 0x0 SPI_.o + .bss 0x00000000 0x0 SPI_.o + .text.Print 0x00000000 0x14 SPI_.o + .text.setup 0x00000000 0x2 SPI_.o + .text 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .data 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .bss 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.mul + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.div + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.prologue + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.builtins + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.fmul + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.fixed + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .data 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.fixed + 0x00000000 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x00000000 0x00020000 xr +data 0x00800060 0x0000ffa0 rw !x +eeprom 0x00810000 0x00010000 rw !x +fuse 0x00820000 0x00000400 rw !x +lock 0x00830000 0x00000400 rw !x +signature 0x00840000 0x00000400 rw !x +user_signatures 0x00850000 0x00000400 rw !x +*default* 0x00000000 0xffffffff + +Linker script and memory map + +Address of section .data set to 0x800100 +LOAD e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o +LOAD SPIMaster.o +LOAD SPI_.o +START GROUP +LOAD e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a +END GROUP +START GROUP +LOAD e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a +LOAD e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a +LOAD e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a +END GROUP + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text) + *(.rel.text.*) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.text.*) + *(.rela.gnu.linkonce.t*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata) + *(.rel.rodata.*) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.rodata.*) + *(.rela.gnu.linkonce.r*) + +.rel.data + *(.rel.data) + *(.rel.data.*) + *(.rel.gnu.linkonce.d*) + +.rela.data + *(.rela.data) + *(.rela.data.*) + *(.rela.gnu.linkonce.d*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x00000000 0x146 + *(.vectors) + .vectors 0x00000000 0x68 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + 0x00000000 __vector_default + 0x00000000 __vectors + *(.vectors) + *(.progmem.gcc*) + 0x00000068 . = ALIGN (0x2) + 0x00000068 __trampolines_start = . + *(.trampolines) + .trampolines 0x00000068 0x0 linker stubs + *(.trampolines*) + 0x00000068 __trampolines_end = . + *(.progmem*) + 0x00000068 . = ALIGN (0x2) + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x00000068 __ctors_start = . + *(.ctors) + 0x00000068 __ctors_end = . + 0x00000068 __dtors_start = . + *(.dtors) + 0x00000068 __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x00000068 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + 0x00000068 __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x00000068 0xc e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x00000074 0x16 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + 0x00000074 __do_copy_data + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x0000008a 0x8 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + *(.init9) + *(.text) + .text 0x00000092 0x4 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + 0x00000092 __vector_22 + 0x00000092 __vector_1 + 0x00000092 __vector_24 + 0x00000092 __vector_12 + 0x00000092 __bad_interrupt + 0x00000092 __vector_6 + 0x00000092 __vector_3 + 0x00000092 __vector_23 + 0x00000092 __vector_25 + 0x00000092 __vector_11 + 0x00000092 __vector_13 + 0x00000092 __vector_17 + 0x00000092 __vector_19 + 0x00000092 __vector_7 + 0x00000092 __vector_5 + 0x00000092 __vector_4 + 0x00000092 __vector_9 + 0x00000092 __vector_2 + 0x00000092 __vector_21 + 0x00000092 __vector_15 + 0x00000092 __vector_8 + 0x00000092 __vector_14 + 0x00000092 __vector_10 + 0x00000092 __vector_16 + 0x00000092 __vector_18 + 0x00000092 __vector_20 + 0x00000096 . = ALIGN (0x2) + *(.text.*) + .text.SPI_MasterInit + 0x00000096 0xc SPIMaster.o + 0x00000096 SPI_MasterInit + .text.SPI_MasterTransmit + 0x000000a2 0x22 SPIMaster.o + 0x000000a2 SPI_MasterTransmit + .text.crc8 0x000000c4 0x36 SPIMaster.o + 0x000000c4 crc8 + .text.main 0x000000fa 0x48 SPI_.o + 0x000000fa main + 0x00000142 . = ALIGN (0x2) + *(.fini9) + .fini9 0x00000142 0x0 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + 0x00000142 _exit + 0x00000142 exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x00000142 0x4 e:/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + *(.fini0) + 0x00000146 _etext = . + +.data 0x00800100 0x10 load address 0x00000146 + 0x00800100 PROVIDE (__data_start, .) + *(.data) + *(.data*) + *(.rodata) + .rodata 0x00800100 0xf SPI_.o + *(.rodata*) + *(.gnu.linkonce.d*) + 0x00800110 . = ALIGN (0x2) + *fill* 0x0080010f 0x1 + 0x00800110 _edata = . + 0x00800110 PROVIDE (__data_end, .) + +.bss 0x00800110 0x0 + 0x00800110 PROVIDE (__bss_start, .) + *(.bss) + *(.bss*) + *(COMMON) + 0x00800110 PROVIDE (__bss_end, .) + 0x00000146 __data_load_start = LOADADDR (.data) + 0x00000156 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00800110 0x0 + 0x00800110 PROVIDE (__noinit_start, .) + *(.noinit*) + 0x00800110 PROVIDE (__noinit_end, .) + 0x00800110 _end = . + 0x00800110 PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.user_signatures + *(.user_signatures*) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x30 + *(.comment) + .comment 0x00000000 0x30 SPIMaster.o + 0x31 (size before relaxing) + .comment 0x00000000 0x31 SPI_.o + +.note.gnu.build-id + *(.note.gnu.build-id) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x68 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x38 SPIMaster.o + .debug_aranges + 0x00000038 0x30 SPI_.o + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x00000000 0x39a + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x00000000 0x1bf SPIMaster.o + .debug_info 0x000001bf 0x1db SPI_.o + +.debug_abbrev 0x00000000 0x275 + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x105 SPIMaster.o + .debug_abbrev 0x00000105 0x170 SPI_.o + +.debug_line 0x00000000 0x173 + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x00000000 0xee SPIMaster.o + .debug_line 0x000000ee 0x85 SPI_.o + +.debug_frame 0x00000000 0xa8 + *(.debug_frame) + .debug_frame 0x00000000 0x54 SPIMaster.o + .debug_frame 0x00000054 0x54 SPI_.o + +.debug_str 0x00000000 0x1ac + *(.debug_str) + .debug_str 0x00000000 0x16b SPIMaster.o + 0x1a4 (size before relaxing) + .debug_str 0x0000016b 0x41 SPI_.o + 0x1c2 (size before relaxing) + +.debug_loc 0x00000000 0x303 + *(.debug_loc) + .debug_loc 0x00000000 0x253 SPIMaster.o + .debug_loc 0x00000253 0xb0 SPI_.o + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x00000000 0x90 + *(.debug_ranges) + .debug_ranges 0x00000000 0x70 SPIMaster.o + .debug_ranges 0x00000070 0x20 SPI_.o + +.debug_macro + *(.debug_macro) +OUTPUT(SPI_.elf elf32-avr) +LOAD linker stubs diff --git a/SPI_/SPI_/Debug/SPI_.o b/SPI_/SPI_/Debug/SPI_.o new file mode 100644 index 0000000000000000000000000000000000000000..316fe14ec401bdf32797788b113e654ac28b1498 GIT binary patch literal 5076 zcma)9U2I%O6`r|wz1jF@?On$|NsZWm+oYkst{t~^(j={uy2*y5P4iO}Ff8l!_3jey zuDg2|;V7t0OIuMQk;HK#K_aNs2Y5k!0K$I}ynsXi!2^{*!H5ScQK4D{3B-f>zPU5I zV?#xcboYGcXU?2Cb7t<{XD5$5E~ONPq&Oj(k`P~u3GpI~W6EK>7!aF9Z*N~Ta_70_ zi_7xrOMTZi$UCv6*is}BY3WV&Cqz&B*y*D9)#4u)Z{56obNE{4xBq$N_8Xl)y7fl< ziV*K#US57@`L;}4JwGfjc3ggCN!}?h&oBQ{%B!@0@#Tsoi68$C**I$Qh|0@O&Lpk4 zBctSwM8-n6PD`;I2*=r=l#!N@g;Fe(VoK6sI~sxA%PB{G6aLCeb`X+Oc-ip~;q0Q! zFG@9@rdUzPI1M3fbiN0mGieRe-eim_d|Rm8BAbIkyLELERcQh#Xdm69PW!{*S?gPxNKd3U_K&5hp`KNU^LVd$?^|dqO7VqpjEWw@c*M(jr2Ay4%6))58XC)VwN<9w|c?^ZiE%0&7LmZtt?SJVS5;ob9W%9$_YU+S-dF@v|)dm zA~Wmy{PPmYjC6Bk;+5y6a9S_z$FQU^pyq&rJ}A1BY316pRiwLz5wCY`QhU_$`&wWX zqTjZKmd(wTZEN4tXesPaRD}His3;=-E(>2VlHrcHzoA<{!uYrXXT=s=TZkCJ5f^NX zeAki`1*34prE><~2cVC>Q3-R5%&dnRmj4gVt9TxN<-g;t0{0%9QF`7mlqZg*GhU9D zAJEZkE%2*eA-oG))NF3M>=I7IiJo#=Fji>oCh4G+8{!rzZw$jtM&GA?ukhFB&mit1 zDd#HXd`kWBeyaIFeO}CDgRH2RYsGxopGoBk*{V<;4HaEW*B^l=jix+ zYA8RN8hR3jS}?OWU#{=kl^U8g;fI*5El(GN*`hx;Q-cy-xu94n57m6dspIsvJfF>- zLF8&Z7rg#ZrB)0o)rF}K z*Q>Q`t}u1tP8Myx3YoO;ZkuIIy=v3R+HpF2}5=TVpDMzBWW zSXC7l2?glXg9i@mPHmrf`gmqMgXLyWz0AoKBR4tvk5RzlCFlj^i^&mB^YwjwT!g~aqcUt2v1fIi7ydQjv*3-sb*o((r2YbNW zd4P?0X^oBTFl6;zKqrt{@6#Ha{7yq=Ohd-+DJbmxK8Ii@p<{lmgUN3e*o*-buj2W= zr7$oHy&dmO#Op$`jE8q$BVHBQi~$tq;4^P24195&-`m*0*Ev9w@p}%kJ?~oyh+CyCtj zJmnZRbs0*Ye-p0@cq1M=-dp&td;vN`CZ3TExAhURvTF3?uA056ao1!*yQ|L1zJ|-n zD%Zs`9n#7w_XQu>npRdnXrSUNtHa>U9M;coSCaFYQym6z1&U@-m`zjRs*`8StbCK) z@IOaG;jXz+I3HKjBscu8&``Ldr-2DvwIfZHD|*EqE%J^`qBHhunR}YVdd%HKogN?c>sKpU2w$4v>vG*! znEDz~-%`yll*X4?CNopXSk@IMoyo}|CvA?8~DN{sl2!T+K4e24!_WBTAffr`U?x-|Yi_<+V=2ET_GaW28< zLt6hj_(Q~)YaIHIYRtVot1;)gN{rwafUj%(GVpgb=H2rfjUNOjnOgDoAZF=UR)d)< zF*$2z{C8MBqZWQpW46s4y}tUJGEO4yJCb4|6sC>U`<`Q8D#cRZn2% o`LGp-XU2^EB(e5aIq*<|c%)7Jw-al +#include + +void SPI_MasterInit(void) +{ + DDR_SPI = (1 << DD_MOSI) | (1 << DD_SCK) | (1 << DD_SS); + DDRB |= (1< +#include +#include +#include "SPIMaster.h" + + +void Print(char *data2, int lenght){ + for(int i = 0; i < lenght; i++) { + // Serial.print(data2[i], HEX); + // Serial.print(" "); + } +} + +void setup() +{ + +} + +int printf( const char * format, ... ) +{ + char buffer[16]; + va_list args; + va_start (args, format); + size_t s = vsprintf (buffer,format, args); + for(size_t i = 0; i < s; i++){ + while (!(UCSR0A & (1< + + + 2.0 + 6.2 + com.Atmel.AVRGCC8.C + {37275dfd-0ce5-467a-9f25-7a9e49ff51c2} + ATmega328P + none + Executable + C + $(MSBuildProjectName) + .elf + $(MSBuildProjectDirectory)\$(Configuration) + SPI_ + SPI_ + SPI_ + Native + true + false + true + true + + + true + + 2 + 1 + + + + + + + + + + + + + + + + + True + True + True + True + False + True + True + + + NDEBUG + + + Optimize for size (-Os) + True + True + True + + + libm + + + + + + + + + True + True + True + True + False + True + True + + + DEBUG + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + Default (-Wa,-g) + + + + + + compile + + + compile + + + compile + + + + \ No newline at end of file