From 2ffd4de5f400ac4812b8285a2f8c812a5cddeabf Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Mon, 11 Nov 2013 17:10:07 +0000 Subject: [PATCH] 20131111-181005 --- Mainboard/Mainboard.atsuo | Bin 23552 -> 23552 bytes Mainboard/Mainboard/Can.h | 4 +- Mainboard/Mainboard/Debug/Mainboard.d | 11 +- Mainboard/Mainboard/Debug/Mainboard.elf | Bin 28831 -> 34259 bytes Mainboard/Mainboard/Debug/Mainboard.hex | 147 ++- Mainboard/Mainboard/Debug/Mainboard.lss | 1235 ++++++++++++---------- Mainboard/Mainboard/Debug/Mainboard.map | 216 ++-- Mainboard/Mainboard/Debug/Mainboard.srec | 147 ++- Mainboard/Mainboard/Led.h | 6 +- Mainboard/Mainboard/Mainboard.cpp | 18 +- Mainboard/Mainboard/Rs232.cpp | 7 +- Mainboard/Mainboard/Rs232.h | 28 +- Mainboard/Mainboard/Spi.cpp | 10 +- Mainboard/Mainboard/Spi.h | 92 +- Mainboard/Mainboard/Spi.hpp | 7 + Mainboard/Mainboard/config.h | 1 - 16 files changed, 1045 insertions(+), 884 deletions(-) create mode 100644 Mainboard/Mainboard/Spi.hpp diff --git a/Mainboard/Mainboard.atsuo b/Mainboard/Mainboard.atsuo index a52161b74df3b3413e51c4732e96d6506e49f9c0..1602e93bbfad77b046788e77b67b4ae4d0fc57f5 100644 GIT binary patch delta 469 zcmZqJ!Pu~aaYGIZpTPOhJ^$~WV`OGvU~sVBT*Y#djg#R&5byy7CeJrgoNU0tzPW_k zpMSEmjO`}r!%Uovf9pwFlXqzdT#Qc(u4l;fWF^po)os zQj<5RPM&<2#c*nOtJ&57M^zi{%zZ*4IE4 zZzeCa4&G!_&ny!3Cf_qinEmD(^VDfyEI-YH*dzh8NdV}6*2xF#n>iWPfm$??4K8s2 z8_3!N6kI&{r-K(KqZ*K@gQCVUVDb?GgUw$Y1sDY%_N1g{x2!JE=`Kq*Q=9M4G!#(AY`b-^a~$rqf9IT^HpM(Ls$=MuuAk1X)TrDt-3n$qM& z7K)sVdO#UABw5y1K+fXLKV92JCfQetXD}21p{J+WZX?sh${{^>jo)whT@7-C!Q_Cb F0|1=RmYVEH#CcMRar0*bIfr8j?Z6krsLJf@y0vS9tXEx#XX+TXl(l6CR~ zBkjo!&h>)v`Y8uyz5KuNuCm?QXPRO~%#$xT7ej(b7iz@h5|r3far+}Y*&+G>2m=5VQjhZh diff --git a/Mainboard/Mainboard/Can.h b/Mainboard/Mainboard/Can.h index 12a9751..dc06e08 100644 --- a/Mainboard/Mainboard/Can.h +++ b/Mainboard/Mainboard/Can.h @@ -21,6 +21,7 @@ typedef struct uint8_t data[8]; } CANMessage; +template class Can { private: void init_can(); @@ -29,9 +30,8 @@ class Can { uint8_t mcp2515_read_register(uint8_t adress); void mcp2515_bit_modify(uint8_t adress, uint8_t mask, uint8_t data); uint8_t mcp2515_read_rx_status(void); - Spi s; public: - Can(Spi spi); + Can(); uint8_t can_send_message(CANMessage *p_message); uint8_t can_get_message(CANMessage *p_message); }; diff --git a/Mainboard/Mainboard/Debug/Mainboard.d b/Mainboard/Mainboard/Debug/Mainboard.d index a897c94..e5e414c 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.d +++ b/Mainboard/Mainboard/Debug/Mainboard.d @@ -1,4 +1,5 @@ Mainboard.d Mainboard.o: .././Mainboard.cpp .././config.h .././Led.h \ + .././portc.hpp \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/inttypes.h \ @@ -10,7 +11,7 @@ Mainboard.d Mainboard.o: .././Mainboard.cpp .././config.h .././Led.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/version.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/fuse.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h \ - .././Rs232.h \ + .././pin.hpp .././Rs232.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ @@ -18,12 +19,14 @@ Mainboard.d Mainboard.o: .././Mainboard.cpp .././config.h .././Led.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/util/delay_basic.h \ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/math.h \ - .././mcp2515_defs.h .././Spi.h + .././mcp2515_defs.h .././Spi.h .././portb.hpp .././config.h: .././Led.h: +.././portc.hpp: + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/io.h: c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/sfr_defs.h: @@ -46,6 +49,8 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8- c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/avr/lock.h: +.././pin.hpp: + .././Rs232.h: c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/../../../../avr/include/stdio.h: @@ -65,3 +70,5 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8- .././mcp2515_defs.h: .././Spi.h: + +.././portb.hpp: diff --git a/Mainboard/Mainboard/Debug/Mainboard.elf b/Mainboard/Mainboard/Debug/Mainboard.elf index 9b18bea3c90ce536328e685c2b1541ba076c9e34..9cce5641d70bbead5e76b95dc233613fe9826a52 100644 GIT binary patch literal 34259 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 QtgUWtt*dR0DeJ|50h7|r=>Px# diff --git a/Mainboard/Mainboard/Debug/Mainboard.hex b/Mainboard/Mainboard/Debug/Mainboard.hex index 6571d33..f042829 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.hex +++ b/Mainboard/Mainboard/Debug/Mainboard.hex @@ -5,20 +5,20 @@ :100040000C9463000C9463000C9463000C946300A4 :100050000C9463000C9463000C9463000C94630094 :100060000C9463000C9463000C9463000C94630084 -:100070000C9463005E0211241FBECFEFD4E0DEBFFC -:10008000CDBF11E0A0E0B1E0EAEFF5E002C00590DD +:100070000C946300400211241FBECFEFD4E0DEBF1A +:10008000CDBF11E0A0E0B1E0E4EAF5E002C00590E8 :100090000D92A630B107D9F721E0A6E0B1E001C08A -:1000A0001D92AB30B207E1F710E0C6E7D0E004C024 -:1000B0002297FE010E94F702C437D107C9F70E94B8 -:1000C00009020C94FB020C940000FF920F931F9303 +:1000A0001D92A930B207E1F710E0C6E7D0E004C026 +:1000B0002297FE010E94CC02C437D107C9F70E94E3 +:1000C000F9010C94D0020C940000FF920F931F933F :1000D000CF93DF931F92CDB7DEB7F82E092F162FDF -:1000E00049830E94C40262E08F2D902F0E94E90292 -:1000F000612F8F2D902F0E94E9024981642F8F2D4F -:10010000902F0E94E9028F2D902F0F90DF91CF91B9 -:100110001F910F91FF900C94C202CF93DF93D82FC1 -:10012000C92F0E94C40260EC8D2F9C2F0E94E9020F +:1000E00049830E949A0262E08F2D902F0E94BE02E7 +:1000F000612F8F2D902F0E94BE024981642F8F2D7A +:10010000902F0E94BE028F2D902F0F90DF91CF91E4 +:100110001F910F91FF900C949702CF93DF93D82FEC +:10012000C92F0E949A0260EC8D2F9C2F0E94BE0264 :100130008FE99FE00197F1F700C000008D2F9C2F01 -:100140000E94C2028FE39CE90197F1F700C0000012 +:100140000E9497028FE39CE90197F1F700C000003D :1001500047E06AE28D2F9C2F0E94650040E969E22A :100160008D2F9C2F0E94650042E068E28D2F9C2F0E :100170000E94650043E06BE28D2F9C2F0E9465007A @@ -30,69 +30,64 @@ :1001D0000E94650040E065E28D2F9C2F0E94650023 :1001E00040E066E28D2F9C2F0E94650040E067E2B0 :1001F0008D2F9C2F0E94650040E06CE08D2F9C2F7E -:10020000DF91CF910C946500FC01408351836283A0 -:100210000C948D00FF920F931F93CF93DF9300D028 -:10022000CDB7DEB7F82E092F162F2A8349830E94F7 -:10023000C40265E08F2D902F0E94E902612F8F2D5F -:10024000902F0E94E9024981642F8F2D902F0E94E8 -:10025000E9022A81622F8F2D902F0E94E9028F2DB3 -:10026000902F0F900F90DF91CF911F910F91FF90E2 -:100270000C94C2021F93CF93DF93D82FC92F0E94F3 -:10028000C40260EB8D2F9C2F0E94E9026FEF8D2F2F -:100290009C2F0E94E902182F6FEF8D2F9C2F0E9438 -:1002A000E9028D2F9C2F0E94C202812FDF91CF91F6 -:1002B0001F9108959F92AF92BF92CF92DF92EF92DB -:1002C000FF920F931F93CF93DF931F92CDB7DEB7AB -:1002D0005C016B010E943A01982E8983898186FD19 -:1002E00011C0898187FD7FC08FEF0F90DF91CF9183 -:1002F0001F910F91FF90EF90DF90CF90BF90AF9044 -:100300009F900895C5010E94C40260E9C5010E9442 -:10031000E9026FEFC5010E94E902282F30E0220FA9 -:10032000331F220F331F220F331FF6013183208327 -:100330006FEFC5010E94E902482F50E0569547959E -:10034000529542954F7045275F704527F6012081F1 -:100350003181242B352B318320836FEFC5010E941F -:10036000E9026FEFC5010E94E9026FEFC5010E942B -:10037000E9028F70F60183838823A1F086010C5F68 -:100380001F4F7601F5E0EF0EF11C8150E80EF11CD5 -:100390006FEFC5010E94E902F80181938F01EE150C -:1003A000FF05B1F7C5010E94C202898183FD0EC01D -:1003B000F6011282898120E086FF0FC041E06CE2E5 -:1003C000C5010E940A01892D87708FCF81E0F60157 -:1003D0008283898120E086FDF1CF42E06CE2C50195 -:1003E0000E940A01F0CFC5010E94C40264E9C50160 -:1003F0000E94E9028ECF84B1806E84B9089585B1E0 -:100400008F7185B985B16295660F607E682B65B97D -:100410000895CF93DF93CDB7DEB72C970FB6F8943E -:10042000DEBF0FBECDBF66E08AE091E00E94FF0113 -:1004300060E071E089E091E00E948A0283E291E04D -:100440009A8389831B8282E08C838FEA8D838EEF6F -:100450008E830EC061E08AE091E00E94FF012FEFE1 -:1004600083ED90E3215080409040E1F700C0000010 -:1004700062E08AE091E00E94FF012FEF81EE94E0BC -:10048000215080409040E1F700C00000BE016F5F46 -:100490007F4F86E091E00E945A018F3FD9F664E0D9 -:1004A0008AE091E00E94FF012FEF81EE94E021505D -:1004B00080409040E1F700C00000DACFCF93DF9397 -:1004C00000D01F92CDB7DEB78AE091E00E94FB0119 -:1004D00089E091E00E947E0260E0CE0101960E94D8 -:1004E000B90249815A816B8186E091E00E94040142 -:1004F0000F900F900F90DF91CF91089586E0809339 -:10050000CA00E9ECF0E080818860808387E6809310 -:10051000CC000895FB019081992351F03196809190 -:10052000C80085FFFCCF9093CE0091919111F7CF39 -:10053000089524B1266124B9239825B1217F25B9D6 -:10054000DC011196ED91FC9112978081817F80836F -:100550002C9A0895CF93DF93EC010E949902888131 -:10056000811104C080E58CBD81E08DBDDF91CF910C -:10057000089521E0FC01208325E230E032832183CD -:100580000C94AA022C9A08952C98089598E080E083 -:1005900060FD2A9A60FF2A9829986695000000005D -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000299A000078 -:1005C00023B123FB222720F9880F822B915001F7BA -:1005D0000895FC012081211106C06EBD0DB407FEF7 -:1005E000FDCF8EB508950C94C602EE0FFF1F059047 -:0A05F000F491E02D0994F894FFCF78 -:0605FA00626C610A0000C2 +:10020000DF91CF910C946500FC0160830C948D000C +:10021000FF920F931F93CF93DF9300D0CDB7DEB73C +:10022000F82E092F162F2A8349830E949A0265E02F +:100230008F2D902F0E94BE02612F8F2D902F0E9434 +:10024000BE024981642F8F2D902F0E94BE022A8109 +:10025000622F8F2D902F0E94BE028F2D902F0F9016 +:100260000F90DF91CF911F910F91FF900C94970207 +:100270001F93CF93DF93D82FC92F0E949A0260EB70 +:100280008D2F9C2F0E94BE026FEF8D2F9C2F0E94FE +:10029000BE02182F6FEF8D2F9C2F0E94BE028D2F54 +:1002A0009C2F0E949702812FDF91CF911F9108957B +:1002B0009F92AF92BF92CF92DF92EF92FF920F93F5 +:1002C0001F93CF93DF931F92CDB7DEB75C016B0115 +:1002D0000E943801982E8983898186FD11C0898109 +:1002E00087FD7FC08FEF0F90DF91CF911F910F910E +:1002F000FF90EF90DF90CF90BF90AF909F900895C8 +:10030000C5010E949A0260E9C5010E94BE026FEF1A +:10031000C5010E94BE02282F30E0220F331F220F9A +:10032000331F220F331FF601318320836FEFC50186 +:100330000E94BE02482F50E056954795529542952F +:100340004F7045275F704527F60120813181242BAE +:10035000352B318320836FEFC5010E94BE026FEF02 +:10036000C5010E94BE026FEFC5010E94BE028F70E0 +:10037000F60183838823A1F086010C5F1F4F76016D +:10038000F5E0EF0EF11C8150E80EF11C6FEFC50196 +:100390000E94BE02F80181938F01EE15FF05B1F7AF +:1003A000C5010E949702898183FD0EC0F601128269 +:1003B000898120E086FF0FC041E06CE2C5010E9408 +:1003C0000801892D87708FCF81E0F60182838981B2 +:1003D00020E086FDF1CF42E06CE2C5010E940801F9 +:1003E000F0CFC5010E949A0264E9C5010E94BE02D5 +:1003F0008ECFCF93DF93CDB7DEB72C970FB6F8949F +:10040000DEBF0FBECDBF47983F9A469A3E9A459AA7 +:100410003D9A60E071E087E091E00E94660283E22D +:1004200091E09A8389831B8282E08C838FEA8D839B +:100430008EEF8E8309C02FEF83ED90E32150804033 +:100440009040E1F700C000002FEF81EE94E02150D2 +:1004500080409040E1F700C00000BE016F5F7F4F19 +:1004600086E091E00E9458018F3F29F72FEF81EE3F +:1004700094E0215080409040E1F700C00000E4CFBC +:10048000CF93DF931F92CDB7DEB73D9A3E9A3F9A46 +:1004900087E091E00E945A0260E0CE0101960E943E +:1004A0009202698186E091E00E9404010F90DF9141 +:1004B000CF91089586E08093CA00E9ECF0E0808156 +:1004C0008860808387E68093CC000895FB0190814B +:1004D000992351F031968091C80085FFFCCF90930D +:1004E000CE0091919111F7CF0895229A2A98229ADD +:1004F000219A2998219A249A2C9A249A23982B9805 +:100500002B98239A0895CF93DF93EC010E947502F4 +:100510008881811104C080E58CBD81E08DBDDF91B3 +:10052000CF91089521E0FC0120830C9483022C9A42 +:10053000249A08952C98249A089598E080E015C094 +:100540002A98229A25E02A95F1F700001B998160EC +:1005500025E02A95F1F70000299A219A2AE02A95A8 +:10056000F1F700C0660F915041F0880F2998219A49 +:1005700067FFE6CF2A9A229AE5CF0895FC012081F1 +:10058000211106C06EBD0DB407FEFDCF8EB50895D6 +:100590000C949D02EE0FFF1F0590F491E02D09943D +:0405A000F894FFCFFD +:0605A400626C610A000018 :00000001FF diff --git a/Mainboard/Mainboard/Debug/Mainboard.lss b/Mainboard/Mainboard/Debug/Mainboard.lss index 0a9b025..10f588a 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.lss +++ b/Mainboard/Mainboard/Debug/Mainboard.lss @@ -3,33 +3,33 @@ Mainboard.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000006 00800100 000005fa 0000068e 2**0 + 0 .data 00000006 00800100 000005a4 00000638 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 000005fa 00000000 00000000 00000094 2**1 + 1 .text 000005a4 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000005 00800106 00800106 00000694 2**0 + 2 .bss 00000003 00800106 00800106 0000063e 2**0 ALLOC - 3 .stab 000006cc 00000000 00000000 00000694 2**2 + 3 .stab 000006cc 00000000 00000000 00000640 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 00000082 00000000 00000000 00000d60 2**0 + 4 .stabstr 00000082 00000000 00000000 00000d0c 2**0 CONTENTS, READONLY, DEBUGGING - 5 .comment 0000002f 00000000 00000000 00000de2 2**0 + 5 .comment 0000002f 00000000 00000000 00000d8e 2**0 CONTENTS, READONLY - 6 .debug_aranges 00000160 00000000 00000000 00000e11 2**0 + 6 .debug_aranges 00000130 00000000 00000000 00000dbd 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 0000233b 00000000 00000000 00000f71 2**0 + 7 .debug_info 000031fa 00000000 00000000 00000eed 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 00000c52 00000000 00000000 000032ac 2**0 + 8 .debug_abbrev 00000c55 00000000 00000000 000040e7 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 000008ce 00000000 00000000 00003efe 2**0 + 9 .debug_line 0000088d 00000000 00000000 00004d3c 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 0000035c 00000000 00000000 000047cc 2**2 + 10 .debug_frame 000002d8 00000000 00000000 000055cc 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 0000054c 00000000 00000000 00004b28 2**0 + 11 .debug_str 00000f02 00000000 00000000 000058a4 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00000dbb 00000000 00000000 00005074 2**0 + 12 .debug_loc 00000c7f 00000000 00000000 000067a6 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000188 00000000 00000000 00005e2f 2**0 + 13 .debug_ranges 00000120 00000000 00000000 00007425 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -66,7 +66,7 @@ Disassembly of section .text: 70: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> 00000074 <__ctors_start>: - 74: 5e 02 muls r21, r30 + 74: 40 02 muls r20, r16 00000076 <__ctors_end>: 76: 11 24 eor r1, r1 @@ -80,7 +80,7 @@ Disassembly of section .text: 82: 11 e0 ldi r17, 0x01 ; 1 84: a0 e0 ldi r26, 0x00 ; 0 86: b1 e0 ldi r27, 0x01 ; 1 - 88: ea ef ldi r30, 0xFA ; 250 + 88: e4 ea ldi r30, 0xA4 ; 164 8a: f5 e0 ldi r31, 0x05 ; 5 8c: 02 c0 rjmp .+4 ; 0x92 <__do_copy_data+0x10> 8e: 05 90 lpm r0, Z+ @@ -99,7 +99,7 @@ Disassembly of section .text: a0: 1d 92 st X+, r1 000000a2 <.do_clear_bss_start>: - a2: ab 30 cpi r26, 0x0B ; 11 + a2: a9 30 cpi r26, 0x09 ; 9 a4: b2 07 cpc r27, r18 a6: e1 f7 brne .-8 ; 0xa0 <.do_clear_bss_loop> @@ -110,12 +110,12 @@ Disassembly of section .text: ae: 04 c0 rjmp .+8 ; 0xb8 <__do_global_ctors+0x10> b0: 22 97 sbiw r28, 0x02 ; 2 b2: fe 01 movw r30, r28 - b4: 0e 94 f7 02 call 0x5ee ; 0x5ee <__tablejump__> + b4: 0e 94 cc 02 call 0x598 ; 0x598 <__tablejump__> b8: c4 37 cpi r28, 0x74 ; 116 ba: d1 07 cpc r29, r17 bc: c9 f7 brne .-14 ; 0xb0 <__do_global_ctors+0x8> - be: 0e 94 09 02 call 0x412 ; 0x412
- c2: 0c 94 fb 02 jmp 0x5f6 ; 0x5f6 <_exit> + be: 0e 94 f9 01 call 0x3f2 ; 0x3f2
+ c2: 0c 94 d0 02 jmp 0x5a0 ; 0x5a0 <_exit> 000000c6 <__bad_interrupt>: c6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> @@ -148,15 +148,15 @@ Disassembly of section .text: return 1; e0: 49 83 std Y+1, r20 ; 0x01 } - e2: 0e 94 c4 02 call 0x588 ; 0x588 <_ZN3Spi4CSOnEv> + e2: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> e6: 62 e0 ldi r22, 0x02 ; 2 e8: 8f 2d mov r24, r15 ea: 90 2f mov r25, r16 - ec: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + ec: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> f0: 61 2f mov r22, r17 f2: 8f 2d mov r24, r15 f4: 90 2f mov r25, r16 - f6: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + f6: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> fa: 49 81 ldd r20, Y+1 ; 0x01 fc: 64 2f mov r22, r20 */ @@ -168,7 +168,7 @@ Disassembly of section .text: fe: 8f 2d mov r24, r15 address = 0x02; 100: 90 2f mov r25, r16 - 102: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 102: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> Puffer gesendet werden soll */ s.CSOn(); // CS wieder Low if (address == 0x00) { @@ -189,7 +189,7 @@ Disassembly of section .text: s.send(length); 112: 0f 91 pop r16 114: ff 90 pop r15 - 116: 0c 94 c2 02 jmp 0x584 ; 0x584 <_ZN3Spi5CSOffEv> + 116: 0c 94 97 02 jmp 0x52e ; 0x52e <_ZN3Spi5CSOffEv> 0000011a <_ZN3Can8init_canEv>: @@ -205,11 +205,11 @@ Disassembly of section .text: uint8_t Can::can_send_message(CANMessage *p_message) 120: c9 2f mov r28, r25 - 122: 0e 94 c4 02 call 0x588 ; 0x588 <_ZN3Spi4CSOnEv> + 122: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> 126: 60 ec ldi r22, 0xC0 ; 192 128: 8d 2f mov r24, r29 12a: 9c 2f mov r25, r28 - 12c: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 12c: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> 130: 8f e9 ldi r24, 0x9F ; 159 132: 9f e0 ldi r25, 0x0F ; 15 134: 01 97 sbiw r24, 0x01 ; 1 @@ -224,7 +224,7 @@ uint8_t Can::can_send_message(CANMessage *p_message) 13a: 00 00 nop 13c: 8d 2f mov r24, r29 13e: 9c 2f mov r25, r28 - 140: 0e 94 c2 02 call 0x584 ; 0x584 <_ZN3Spi5CSOffEv> + 140: 0e 94 97 02 call 0x52e ; 0x52e <_ZN3Spi5CSOffEv> { // Nachrichten Laenge einstellen s.send(length); @@ -390,863 +390,962 @@ uint8_t Can::can_send_message(CANMessage *p_message) Can::Can(Spi spi) : s(spi) { 208: fc 01 movw r30, r24 - 20a: 40 83 st Z, r20 - 20c: 51 83 std Z+1, r21 ; 0x01 - 20e: 62 83 std Z+2, r22 ; 0x02 + 20a: 60 83 st Z, r22 init_can(); - 210: 0c 94 8d 00 jmp 0x11a ; 0x11a <_ZN3Can8init_canEv> + 20c: 0c 94 8d 00 jmp 0x11a ; 0x11a <_ZN3Can8init_canEv> -00000214 <_ZN3Can18mcp2515_bit_modifyEhhh>: +00000210 <_ZN3Can18mcp2515_bit_modifyEhhh>: return data; } void Can::mcp2515_bit_modify(uint8_t adress, uint8_t mask, uint8_t data) { - 214: ff 92 push r15 - 216: 0f 93 push r16 - 218: 1f 93 push r17 - 21a: cf 93 push r28 - 21c: df 93 push r29 - 21e: 00 d0 rcall .+0 ; 0x220 <_ZN3Can18mcp2515_bit_modifyEhhh+0xc> - 220: cd b7 in r28, 0x3d ; 61 - 222: de b7 in r29, 0x3e ; 62 - 224: f8 2e mov r15, r24 - 226: 09 2f mov r16, r25 - 228: 16 2f mov r17, r22 + 210: ff 92 push r15 + 212: 0f 93 push r16 + 214: 1f 93 push r17 + 216: cf 93 push r28 + 218: df 93 push r29 + 21a: 00 d0 rcall .+0 ; 0x21c <_ZN3Can18mcp2515_bit_modifyEhhh+0xc> + 21c: cd b7 in r28, 0x3d ; 61 + 21e: de b7 in r29, 0x3e ; 62 + 220: f8 2e mov r15, r24 + 222: 09 2f mov r16, r25 + 224: 16 2f mov r17, r22 // /CS des MCP2515 auf Low ziehen s.CSOn(); - 22a: 2a 83 std Y+2, r18 ; 0x02 - 22c: 49 83 std Y+1, r20 ; 0x01 - 22e: 0e 94 c4 02 call 0x588 ; 0x588 <_ZN3Spi4CSOnEv> + 226: 2a 83 std Y+2, r18 ; 0x02 + 228: 49 83 std Y+1, r20 ; 0x01 + 22a: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> s.send(SPI_BIT_MODIFY); - 232: 65 e0 ldi r22, 0x05 ; 5 - 234: 8f 2d mov r24, r15 - 236: 90 2f mov r25, r16 - 238: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 22e: 65 e0 ldi r22, 0x05 ; 5 + 230: 8f 2d mov r24, r15 + 232: 90 2f mov r25, r16 + 234: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> s.send(adress); - 23c: 61 2f mov r22, r17 - 23e: 8f 2d mov r24, r15 - 240: 90 2f mov r25, r16 - 242: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 238: 61 2f mov r22, r17 + 23a: 8f 2d mov r24, r15 + 23c: 90 2f mov r25, r16 + 23e: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> s.send(mask); - 246: 49 81 ldd r20, Y+1 ; 0x01 - 248: 64 2f mov r22, r20 - 24a: 8f 2d mov r24, r15 - 24c: 90 2f mov r25, r16 - 24e: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 242: 49 81 ldd r20, Y+1 ; 0x01 + 244: 64 2f mov r22, r20 + 246: 8f 2d mov r24, r15 + 248: 90 2f mov r25, r16 + 24a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> s.send(data); - 252: 2a 81 ldd r18, Y+2 ; 0x02 - 254: 62 2f mov r22, r18 - 256: 8f 2d mov r24, r15 - 258: 90 2f mov r25, r16 - 25a: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 24e: 2a 81 ldd r18, Y+2 ; 0x02 + 250: 62 2f mov r22, r18 + 252: 8f 2d mov r24, r15 + 254: 90 2f mov r25, r16 + 256: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> // /CS Leitung wieder freigeben s.CSOff(); - 25e: 8f 2d mov r24, r15 - 260: 90 2f mov r25, r16 + 25a: 8f 2d mov r24, r15 + 25c: 90 2f mov r25, r16 } - 262: 0f 90 pop r0 - 264: 0f 90 pop r0 - 266: df 91 pop r29 - 268: cf 91 pop r28 - 26a: 1f 91 pop r17 - 26c: 0f 91 pop r16 - 26e: ff 90 pop r15 + 25e: 0f 90 pop r0 + 260: 0f 90 pop r0 + 262: df 91 pop r29 + 264: cf 91 pop r28 + 266: 1f 91 pop r17 + 268: 0f 91 pop r16 + 26a: ff 90 pop r15 s.send(adress); s.send(mask); s.send(data); // /CS Leitung wieder freigeben s.CSOff(); - 270: 0c 94 c2 02 jmp 0x584 ; 0x584 <_ZN3Spi5CSOffEv> + 26c: 0c 94 97 02 jmp 0x52e ; 0x52e <_ZN3Spi5CSOffEv> -00000274 <_ZN3Can22mcp2515_read_rx_statusEv>: +00000270 <_ZN3Can22mcp2515_read_rx_statusEv>: return (status & 0x07); } uint8_t Can::mcp2515_read_rx_status(void) { - 274: 1f 93 push r17 - 276: cf 93 push r28 - 278: df 93 push r29 - 27a: d8 2f mov r29, r24 - 27c: c9 2f mov r28, r25 + 270: 1f 93 push r17 + 272: cf 93 push r28 + 274: df 93 push r29 + 276: d8 2f mov r29, r24 + 278: c9 2f mov r28, r25 uint8_t data; // /CS des MCP2515 auf Low ziehen s.CSOn(); - 27e: 0e 94 c4 02 call 0x588 ; 0x588 <_ZN3Spi4CSOnEv> + 27a: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> s.send(SPI_RX_STATUS); - 282: 60 eb ldi r22, 0xB0 ; 176 - 284: 8d 2f mov r24, r29 - 286: 9c 2f mov r25, r28 - 288: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 27e: 60 eb ldi r22, 0xB0 ; 176 + 280: 8d 2f mov r24, r29 + 282: 9c 2f mov r25, r28 + 284: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> data = s.send(0xff); - 28c: 6f ef ldi r22, 0xFF ; 255 - 28e: 8d 2f mov r24, r29 - 290: 9c 2f mov r25, r28 - 292: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> - 296: 18 2f mov r17, r24 + 288: 6f ef ldi r22, 0xFF ; 255 + 28a: 8d 2f mov r24, r29 + 28c: 9c 2f mov r25, r28 + 28e: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> + 292: 18 2f mov r17, r24 // Die Daten werden noch einmal wiederholt gesendet, // man braucht also nur eins der beiden Bytes auswerten. s.send(0xff); - 298: 6f ef ldi r22, 0xFF ; 255 - 29a: 8d 2f mov r24, r29 - 29c: 9c 2f mov r25, r28 - 29e: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 294: 6f ef ldi r22, 0xFF ; 255 + 296: 8d 2f mov r24, r29 + 298: 9c 2f mov r25, r28 + 29a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> // /CS Leitung wieder freigeben s.CSOff(); - 2a2: 8d 2f mov r24, r29 - 2a4: 9c 2f mov r25, r28 - 2a6: 0e 94 c2 02 call 0x584 ; 0x584 <_ZN3Spi5CSOffEv> + 29e: 8d 2f mov r24, r29 + 2a0: 9c 2f mov r25, r28 + 2a2: 0e 94 97 02 call 0x52e ; 0x52e <_ZN3Spi5CSOffEv> return data; - 2aa: 81 2f mov r24, r17 - 2ac: df 91 pop r29 - 2ae: cf 91 pop r28 - 2b0: 1f 91 pop r17 - 2b2: 08 95 ret + 2a6: 81 2f mov r24, r17 + 2a8: df 91 pop r29 + 2aa: cf 91 pop r28 + 2ac: 1f 91 pop r17 + 2ae: 08 95 ret -000002b4 <_ZN3Can15can_get_messageEP10CANMessage>: +000002b0 <_ZN3Can15can_get_messageEP10CANMessage>: return 1; } uint8_t Can::can_get_message(CANMessage *p_message) { - 2b4: 9f 92 push r9 - 2b6: af 92 push r10 - 2b8: bf 92 push r11 - 2ba: cf 92 push r12 - 2bc: df 92 push r13 - 2be: ef 92 push r14 - 2c0: ff 92 push r15 - 2c2: 0f 93 push r16 - 2c4: 1f 93 push r17 - 2c6: cf 93 push r28 - 2c8: df 93 push r29 - 2ca: 1f 92 push r1 - 2cc: cd b7 in r28, 0x3d ; 61 - 2ce: de b7 in r29, 0x3e ; 62 - 2d0: 5c 01 movw r10, r24 - 2d2: 6b 01 movw r12, r22 + 2b0: 9f 92 push r9 + 2b2: af 92 push r10 + 2b4: bf 92 push r11 + 2b6: cf 92 push r12 + 2b8: df 92 push r13 + 2ba: ef 92 push r14 + 2bc: ff 92 push r15 + 2be: 0f 93 push r16 + 2c0: 1f 93 push r17 + 2c2: cf 93 push r28 + 2c4: df 93 push r29 + 2c6: 1f 92 push r1 + 2c8: cd b7 in r28, 0x3d ; 61 + 2ca: de b7 in r29, 0x3e ; 62 + 2cc: 5c 01 movw r10, r24 + 2ce: 6b 01 movw r12, r22 // Status auslesen uint8_t status = mcp2515_read_rx_status(); - 2d4: 0e 94 3a 01 call 0x274 ; 0x274 <_ZN3Can22mcp2515_read_rx_statusEv> - 2d8: 98 2e mov r9, r24 - 2da: 89 83 std Y+1, r24 ; 0x01 + 2d0: 0e 94 38 01 call 0x270 ; 0x270 <_ZN3Can22mcp2515_read_rx_statusEv> + 2d4: 98 2e mov r9, r24 + 2d6: 89 83 std Y+1, r24 ; 0x01 if (bit_is_set(status,6)) - 2dc: 89 81 ldd r24, Y+1 ; 0x01 - 2de: 86 fd sbrc r24, 6 - 2e0: 11 c0 rjmp .+34 ; 0x304 <_ZN3Can15can_get_messageEP10CANMessage+0x50> + 2d8: 89 81 ldd r24, Y+1 ; 0x01 + 2da: 86 fd sbrc r24, 6 + 2dc: 11 c0 rjmp .+34 ; 0x300 <_ZN3Can15can_get_messageEP10CANMessage+0x50> // Nachricht in Puffer 0 s.CSOn(); // CS Low s.send(SPI_READ_RX); } else if (bit_is_set(status,7)) - 2e2: 89 81 ldd r24, Y+1 ; 0x01 - 2e4: 87 fd sbrc r24, 7 - 2e6: 7f c0 rjmp .+254 ; 0x3e6 <_ZN3Can15can_get_messageEP10CANMessage+0x132> + 2de: 89 81 ldd r24, Y+1 ; 0x01 + 2e0: 87 fd sbrc r24, 7 + 2e2: 7f c0 rjmp .+254 ; 0x3e2 <_ZN3Can15can_get_messageEP10CANMessage+0x132> s.CSOn(); // CS Low s.send(SPI_READ_RX | 0x04); } else { /* Fehler: Keine neue Nachricht vorhanden */ return 0xff; - 2e8: 8f ef ldi r24, 0xFF ; 255 + 2e4: 8f ef ldi r24, 0xFF ; 255 } else { mcp2515_bit_modify(CANINTF, (1< + 300: c5 01 movw r24, r10 + 302: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> s.send(SPI_READ_RX); - 30a: 60 e9 ldi r22, 0x90 ; 144 - 30c: c5 01 movw r24, r10 - 30e: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 306: 60 e9 ldi r22, 0x90 ; 144 + 308: c5 01 movw r24, r10 + 30a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> /* Fehler: Keine neue Nachricht vorhanden */ return 0xff; } // Standard ID auslesen p_message->id = (uint16_t) s.send(0xff) << 3; - 312: 6f ef ldi r22, 0xFF ; 255 - 314: c5 01 movw r24, r10 - 316: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> - 31a: 28 2f mov r18, r24 - 31c: 30 e0 ldi r19, 0x00 ; 0 + 30e: 6f ef ldi r22, 0xFF ; 255 + 310: c5 01 movw r24, r10 + 312: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> + 316: 28 2f mov r18, r24 + 318: 30 e0 ldi r19, 0x00 ; 0 + 31a: 22 0f add r18, r18 + 31c: 33 1f adc r19, r19 31e: 22 0f add r18, r18 320: 33 1f adc r19, r19 322: 22 0f add r18, r18 324: 33 1f adc r19, r19 - 326: 22 0f add r18, r18 - 328: 33 1f adc r19, r19 - 32a: f6 01 movw r30, r12 - 32c: 31 83 std Z+1, r19 ; 0x01 - 32e: 20 83 st Z, r18 + 326: f6 01 movw r30, r12 + 328: 31 83 std Z+1, r19 ; 0x01 + 32a: 20 83 st Z, r18 p_message->id |= (uint16_t) s.send(0xff) >> 5; - 330: 6f ef ldi r22, 0xFF ; 255 - 332: c5 01 movw r24, r10 - 334: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> - 338: 48 2f mov r20, r24 - 33a: 50 e0 ldi r21, 0x00 ; 0 - 33c: 56 95 lsr r21 - 33e: 47 95 ror r20 - 340: 52 95 swap r21 - 342: 42 95 swap r20 - 344: 4f 70 andi r20, 0x0F ; 15 + 32c: 6f ef ldi r22, 0xFF ; 255 + 32e: c5 01 movw r24, r10 + 330: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> + 334: 48 2f mov r20, r24 + 336: 50 e0 ldi r21, 0x00 ; 0 + 338: 56 95 lsr r21 + 33a: 47 95 ror r20 + 33c: 52 95 swap r21 + 33e: 42 95 swap r20 + 340: 4f 70 andi r20, 0x0F ; 15 + 342: 45 27 eor r20, r21 + 344: 5f 70 andi r21, 0x0F ; 15 346: 45 27 eor r20, r21 - 348: 5f 70 andi r21, 0x0F ; 15 - 34a: 45 27 eor r20, r21 - 34c: f6 01 movw r30, r12 - 34e: 20 81 ld r18, Z - 350: 31 81 ldd r19, Z+1 ; 0x01 - 352: 24 2b or r18, r20 - 354: 35 2b or r19, r21 - 356: 31 83 std Z+1, r19 ; 0x01 - 358: 20 83 st Z, r18 + 348: f6 01 movw r30, r12 + 34a: 20 81 ld r18, Z + 34c: 31 81 ldd r19, Z+1 ; 0x01 + 34e: 24 2b or r18, r20 + 350: 35 2b or r19, r21 + 352: 31 83 std Z+1, r19 ; 0x01 + 354: 20 83 st Z, r18 s.send(0xff); - 35a: 6f ef ldi r22, 0xFF ; 255 - 35c: c5 01 movw r24, r10 - 35e: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 356: 6f ef ldi r22, 0xFF ; 255 + 358: c5 01 movw r24, r10 + 35a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> s.send(0xff); - 362: 6f ef ldi r22, 0xFF ; 255 - 364: c5 01 movw r24, r10 - 366: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + 35e: 6f ef ldi r22, 0xFF ; 255 + 360: c5 01 movw r24, r10 + 362: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> // Laenge auslesen uint8_t length = s.send(0xff) & 0x0f; - 36a: 6f ef ldi r22, 0xFF ; 255 - 36c: c5 01 movw r24, r10 - 36e: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> - 372: 8f 70 andi r24, 0x0F ; 15 + 366: 6f ef ldi r22, 0xFF ; 255 + 368: c5 01 movw r24, r10 + 36a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> + 36e: 8f 70 andi r24, 0x0F ; 15 p_message->length = length; - 374: f6 01 movw r30, r12 - 376: 83 83 std Z+3, r24 ; 0x03 + 370: f6 01 movw r30, r12 + 372: 83 83 std Z+3, r24 ; 0x03 // Daten auslesen for (uint8_t i=0;i + 374: 88 23 and r24, r24 + 376: a1 f0 breq .+40 ; 0x3a0 <_ZN3Can15can_get_messageEP10CANMessage+0xf0> s.CSOff(); // CS auf High return 1; } uint8_t Can::can_get_message(CANMessage *p_message) - 37c: 86 01 movw r16, r12 - 37e: 0c 5f subi r16, 0xFC ; 252 - 380: 1f 4f sbci r17, 0xFF ; 255 - 382: 76 01 movw r14, r12 - 384: f5 e0 ldi r31, 0x05 ; 5 - 386: ef 0e add r14, r31 - 388: f1 1c adc r15, r1 - 38a: 81 50 subi r24, 0x01 ; 1 - 38c: e8 0e add r14, r24 - 38e: f1 1c adc r15, r1 + 378: 86 01 movw r16, r12 + 37a: 0c 5f subi r16, 0xFC ; 252 + 37c: 1f 4f sbci r17, 0xFF ; 255 + 37e: 76 01 movw r14, r12 + 380: f5 e0 ldi r31, 0x05 ; 5 + 382: ef 0e add r14, r31 + 384: f1 1c adc r15, r1 + 386: 81 50 subi r24, 0x01 ; 1 + 388: e8 0e add r14, r24 + 38a: f1 1c adc r15, r1 uint8_t length = s.send(0xff) & 0x0f; p_message->length = length; // Daten auslesen for (uint8_t i=0;idata[i] = s.send(0xff); - 390: 6f ef ldi r22, 0xFF ; 255 - 392: c5 01 movw r24, r10 - 394: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> - 398: f8 01 movw r30, r16 - 39a: 81 93 st Z+, r24 - 39c: 8f 01 movw r16, r30 + 38c: 6f ef ldi r22, 0xFF ; 255 + 38e: c5 01 movw r24, r10 + 390: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> + 394: f8 01 movw r30, r16 + 396: 81 93 st Z+, r24 + 398: 8f 01 movw r16, r30 // Laenge auslesen uint8_t length = s.send(0xff) & 0x0f; p_message->length = length; // Daten auslesen for (uint8_t i=0;i + 39a: ee 15 cp r30, r14 + 39c: ff 05 cpc r31, r15 + 39e: b1 f7 brne .-20 ; 0x38c <_ZN3Can15can_get_messageEP10CANMessage+0xdc> p_message->data[i] = s.send(0xff); } s.CSOff(); - 3a4: c5 01 movw r24, r10 - 3a6: 0e 94 c2 02 call 0x584 ; 0x584 <_ZN3Spi5CSOffEv> + 3a0: c5 01 movw r24, r10 + 3a2: 0e 94 97 02 call 0x52e ; 0x52e <_ZN3Spi5CSOffEv> if (bit_is_set(status,3)) { - 3aa: 89 81 ldd r24, Y+1 ; 0x01 - 3ac: 83 fd sbrc r24, 3 - 3ae: 0e c0 rjmp .+28 ; 0x3cc <_ZN3Can15can_get_messageEP10CANMessage+0x118> + 3a6: 89 81 ldd r24, Y+1 ; 0x01 + 3a8: 83 fd sbrc r24, 3 + 3aa: 0e c0 rjmp .+28 ; 0x3c8 <_ZN3Can15can_get_messageEP10CANMessage+0x118> p_message->rtr = 1; } else { p_message->rtr = 0; - 3b0: f6 01 movw r30, r12 - 3b2: 12 82 std Z+2, r1 ; 0x02 + 3ac: f6 01 movw r30, r12 + 3ae: 12 82 std Z+2, r1 ; 0x02 } // Interrupt Flag loeschen if (bit_is_set(status,6)) { - 3b4: 89 81 ldd r24, Y+1 ; 0x01 + 3b0: 89 81 ldd r24, Y+1 ; 0x01 mcp2515_bit_modify(CANINTF, (1<rtr = 0; } // Interrupt Flag loeschen if (bit_is_set(status,6)) { - 3b8: 86 ff sbrs r24, 6 - 3ba: 0f c0 rjmp .+30 ; 0x3da <_ZN3Can15can_get_messageEP10CANMessage+0x126> + 3b4: 86 ff sbrs r24, 6 + 3b6: 0f c0 rjmp .+30 ; 0x3d6 <_ZN3Can15can_get_messageEP10CANMessage+0x126> mcp2515_bit_modify(CANINTF, (1< + 3b8: 41 e0 ldi r20, 0x01 ; 1 + 3ba: 6c e2 ldi r22, 0x2C ; 44 + 3bc: c5 01 movw r24, r10 + 3be: 0e 94 08 01 call 0x210 ; 0x210 <_ZN3Can18mcp2515_bit_modifyEhhh> } else { mcp2515_bit_modify(CANINTF, (1< + 3c2: 89 2d mov r24, r9 + 3c4: 87 70 andi r24, 0x07 ; 7 + 3c6: 8f cf rjmp .-226 ; 0x2e6 <_ZN3Can15can_get_messageEP10CANMessage+0x36> } s.CSOff(); if (bit_is_set(status,3)) { p_message->rtr = 1; - 3cc: 81 e0 ldi r24, 0x01 ; 1 - 3ce: f6 01 movw r30, r12 - 3d0: 82 83 std Z+2, r24 ; 0x02 + 3c8: 81 e0 ldi r24, 0x01 ; 1 + 3ca: f6 01 movw r30, r12 + 3cc: 82 83 std Z+2, r24 ; 0x02 } else { p_message->rtr = 0; } // Interrupt Flag loeschen if (bit_is_set(status,6)) { - 3d2: 89 81 ldd r24, Y+1 ; 0x01 + 3ce: 89 81 ldd r24, Y+1 ; 0x01 mcp2515_bit_modify(CANINTF, (1<rtr = 0; } // Interrupt Flag loeschen if (bit_is_set(status,6)) { - 3d6: 86 fd sbrc r24, 6 - 3d8: f1 cf rjmp .-30 ; 0x3bc <_ZN3Can15can_get_messageEP10CANMessage+0x108> + 3d2: 86 fd sbrc r24, 6 + 3d4: f1 cf rjmp .-30 ; 0x3b8 <_ZN3Can15can_get_messageEP10CANMessage+0x108> mcp2515_bit_modify(CANINTF, (1< - 3e4: f0 cf rjmp .-32 ; 0x3c6 <_ZN3Can15can_get_messageEP10CANMessage+0x112> + 3d6: 42 e0 ldi r20, 0x02 ; 2 + 3d8: 6c e2 ldi r22, 0x2C ; 44 + 3da: c5 01 movw r24, r10 + 3dc: 0e 94 08 01 call 0x210 ; 0x210 <_ZN3Can18mcp2515_bit_modifyEhhh> + 3e0: f0 cf rjmp .-32 ; 0x3c2 <_ZN3Can15can_get_messageEP10CANMessage+0x112> } else if (bit_is_set(status,7)) { // Nachricht in Puffer 1 s.CSOn(); // CS Low - 3e6: c5 01 movw r24, r10 - 3e8: 0e 94 c4 02 call 0x588 ; 0x588 <_ZN3Spi4CSOnEv> + 3e2: c5 01 movw r24, r10 + 3e4: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> s.send(SPI_READ_RX | 0x04); - 3ec: 64 e9 ldi r22, 0x94 ; 148 - 3ee: c5 01 movw r24, r10 - 3f0: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> - 3f4: 8e cf rjmp .-228 ; 0x312 <_ZN3Can15can_get_messageEP10CANMessage+0x5e> + 3e8: 64 e9 ldi r22, 0x94 ; 148 + 3ea: c5 01 movw r24, r10 + 3ec: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> + 3f0: 8e cf rjmp .-228 ; 0x30e <_ZN3Can15can_get_messageEP10CANMessage+0x5e> -000003f6 <_ZN3LedC1Ev>: -Led::Led() { - init(); -} - -void Led::init() { - LEDDDR |= (1<: - int rgb = 0; - rgb |= (mask & (1<<0)) ? (1<<0) : (0<<0); - rgb |= (mask & (1<<1)) ? (1<<1) : (0<<1); - rgb |= (mask & (1<<2)) ? (1<<2) : (0<<2); - - LEDPORT &= ~((1<: -Led l; +000003f2
: +ledclass l; Rs232 r; Can c(Spi(0)); int main(void) { - 412: cf 93 push r28 - 414: df 93 push r29 - 416: cd b7 in r28, 0x3d ; 61 - 418: de b7 in r29, 0x3e ; 62 - 41a: 2c 97 sbiw r28, 0x0c ; 12 - 41c: 0f b6 in r0, 0x3f ; 63 - 41e: f8 94 cli - 420: de bf out 0x3e, r29 ; 62 - 422: 0f be out 0x3f, r0 ; 63 - 424: cd bf out 0x3d, r28 ; 61 - l.color(Led::YELLOW); - 426: 66 e0 ldi r22, 0x06 ; 6 - 428: 8a e0 ldi r24, 0x0A ; 10 - 42a: 91 e0 ldi r25, 0x01 ; 1 - 42c: 0e 94 ff 01 call 0x3fe ; 0x3fe <_ZN3Led5colorEh> + 3f2: cf 93 push r28 + 3f4: df 93 push r29 + 3f6: cd b7 in r28, 0x3d ; 61 + 3f8: de b7 in r29, 0x3e ; 62 + 3fa: 2c 97 sbiw r28, 0x0c ; 12 + 3fc: 0f b6 in r0, 0x3f ; 63 + 3fe: f8 94 cli + 400: de bf out 0x3e, r29 ; 62 + 402: 0f be out 0x3f, r0 ; 63 + 404: cd bf out 0x3d, r28 ; 61 +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 406: 47 98 cbi 0x08, 7 ; 8 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + 408: 3f 9a sbi 0x07, 7 ; 7 +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 40a: 46 9a sbi 0x08, 6 ; 8 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + 40c: 3e 9a sbi 0x07, 6 ; 7 +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 40e: 45 9a sbi 0x08, 5 ; 8 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + 410: 3d 9a sbi 0x07, 5 ; 7 + //l.color(Led::YELLOW); + l.color(l.YELLOW); r.send("bla\n"); - 430: 60 e0 ldi r22, 0x00 ; 0 - 432: 71 e0 ldi r23, 0x01 ; 1 - 434: 89 e0 ldi r24, 0x09 ; 9 - 436: 91 e0 ldi r25, 0x01 ; 1 - 438: 0e 94 8a 02 call 0x514 ; 0x514 <_ZN5Rs2324sendEPKc> + 412: 60 e0 ldi r22, 0x00 ; 0 + 414: 71 e0 ldi r23, 0x01 ; 1 + 416: 87 e0 ldi r24, 0x07 ; 7 + 418: 91 e0 ldi r25, 0x01 ; 1 + 41a: 0e 94 66 02 call 0x4cc ; 0x4cc <_ZN5Rs2324sendEPKc> CANMessage m; m.id = 0x0123; - 43c: 83 e2 ldi r24, 0x23 ; 35 - 43e: 91 e0 ldi r25, 0x01 ; 1 - 440: 9a 83 std Y+2, r25 ; 0x02 - 442: 89 83 std Y+1, r24 ; 0x01 + 41e: 83 e2 ldi r24, 0x23 ; 35 + 420: 91 e0 ldi r25, 0x01 ; 1 + 422: 9a 83 std Y+2, r25 ; 0x02 + 424: 89 83 std Y+1, r24 ; 0x01 m.rtr = 0; - 444: 1b 82 std Y+3, r1 ; 0x03 + 426: 1b 82 std Y+3, r1 ; 0x03 m.length = 2; - 446: 82 e0 ldi r24, 0x02 ; 2 - 448: 8c 83 std Y+4, r24 ; 0x04 + 428: 82 e0 ldi r24, 0x02 ; 2 + 42a: 8c 83 std Y+4, r24 ; 0x04 m.data[0] = 0xAF; - 44a: 8f ea ldi r24, 0xAF ; 175 - 44c: 8d 83 std Y+5, r24 ; 0x05 + 42c: 8f ea ldi r24, 0xAF ; 175 + 42e: 8d 83 std Y+5, r24 ; 0x05 m.data[1] = 0xFE; - 44e: 8e ef ldi r24, 0xFE ; 254 - 450: 8e 83 std Y+6, r24 ; 0x06 - 452: 0e c0 rjmp .+28 ; 0x470 - uint8_t r = c.can_get_message(&m); - if(r == 0xFF) { - l.color(Led::RED); - _delay_ms(100); - } else { - l.color(Led::BLUE); - 454: 61 e0 ldi r22, 0x01 ; 1 - 456: 8a e0 ldi r24, 0x0A ; 10 - 458: 91 e0 ldi r25, 0x01 ; 1 - 45a: 0e 94 ff 01 call 0x3fe ; 0x3fe <_ZN3Led5colorEh> + 430: 8e ef ldi r24, 0xFE ; 254 + 432: 8e 83 std Y+6, r24 ; 0x06 + 434: 09 c0 rjmp .+18 ; 0x448 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 45e: 2f ef ldi r18, 0xFF ; 255 - 460: 83 ed ldi r24, 0xD3 ; 211 - 462: 90 e3 ldi r25, 0x30 ; 48 - 464: 21 50 subi r18, 0x01 ; 1 - 466: 80 40 sbci r24, 0x00 ; 0 - 468: 90 40 sbci r25, 0x00 ; 0 - 46a: e1 f7 brne .-8 ; 0x464 - 46c: 00 c0 rjmp .+0 ; 0x46e - 46e: 00 00 nop - m.length = 2; - m.data[0] = 0xAF; - m.data[1] = 0xFE; - while(1) - { - l.color(Led::GREEN); - 470: 62 e0 ldi r22, 0x02 ; 2 - 472: 8a e0 ldi r24, 0x0A ; 10 - 474: 91 e0 ldi r25, 0x01 ; 1 - 476: 0e 94 ff 01 call 0x3fe ; 0x3fe <_ZN3Led5colorEh> - 47a: 2f ef ldi r18, 0xFF ; 255 - 47c: 81 ee ldi r24, 0xE1 ; 225 - 47e: 94 e0 ldi r25, 0x04 ; 4 - 480: 21 50 subi r18, 0x01 ; 1 - 482: 80 40 sbci r24, 0x00 ; 0 - 484: 90 40 sbci r25, 0x00 ; 0 - 486: e1 f7 brne .-8 ; 0x480 - 488: 00 c0 rjmp .+0 ; 0x48a - 48a: 00 00 nop + 436: 2f ef ldi r18, 0xFF ; 255 + 438: 83 ed ldi r24, 0xD3 ; 211 + 43a: 90 e3 ldi r25, 0x30 ; 48 + 43c: 21 50 subi r18, 0x01 ; 1 + 43e: 80 40 sbci r24, 0x00 ; 0 + 440: 90 40 sbci r25, 0x00 ; 0 + 442: e1 f7 brne .-8 ; 0x43c + 444: 00 c0 rjmp .+0 ; 0x446 + 446: 00 00 nop + 448: 2f ef ldi r18, 0xFF ; 255 + 44a: 81 ee ldi r24, 0xE1 ; 225 + 44c: 94 e0 ldi r25, 0x04 ; 4 + 44e: 21 50 subi r18, 0x01 ; 1 + 450: 80 40 sbci r24, 0x00 ; 0 + 452: 90 40 sbci r25, 0x00 ; 0 + 454: e1 f7 brne .-8 ; 0x44e + 456: 00 c0 rjmp .+0 ; 0x458 + 458: 00 00 nop //c.can_send_message(&m); //l.color(Led::BLACK); //_delay_ms(100); //l.color(Led::GREEN); //c.can_send_message(&m); uint8_t r = c.can_get_message(&m); - 48c: be 01 movw r22, r28 - 48e: 6f 5f subi r22, 0xFF ; 255 - 490: 7f 4f sbci r23, 0xFF ; 255 - 492: 86 e0 ldi r24, 0x06 ; 6 - 494: 91 e0 ldi r25, 0x01 ; 1 - 496: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <_ZN3Can15can_get_messageEP10CANMessage> + 45a: be 01 movw r22, r28 + 45c: 6f 5f subi r22, 0xFF ; 255 + 45e: 7f 4f sbci r23, 0xFF ; 255 + 460: 86 e0 ldi r24, 0x06 ; 6 + 462: 91 e0 ldi r25, 0x01 ; 1 + 464: 0e 94 58 01 call 0x2b0 ; 0x2b0 <_ZN3Can15can_get_messageEP10CANMessage> if(r == 0xFF) { - 49a: 8f 3f cpi r24, 0xFF ; 255 - 49c: d9 f6 brne .-74 ; 0x454 - l.color(Led::RED); - 49e: 64 e0 ldi r22, 0x04 ; 4 - 4a0: 8a e0 ldi r24, 0x0A ; 10 - 4a2: 91 e0 ldi r25, 0x01 ; 1 - 4a4: 0e 94 ff 01 call 0x3fe ; 0x3fe <_ZN3Led5colorEh> - 4a8: 2f ef ldi r18, 0xFF ; 255 - 4aa: 81 ee ldi r24, 0xE1 ; 225 - 4ac: 94 e0 ldi r25, 0x04 ; 4 - 4ae: 21 50 subi r18, 0x01 ; 1 - 4b0: 80 40 sbci r24, 0x00 ; 0 - 4b2: 90 40 sbci r25, 0x00 ; 0 - 4b4: e1 f7 brne .-8 ; 0x4ae - 4b6: 00 c0 rjmp .+0 ; 0x4b8 - 4b8: 00 00 nop - 4ba: da cf rjmp .-76 ; 0x470 + 468: 8f 3f cpi r24, 0xFF ; 255 + 46a: 29 f7 brne .-54 ; 0x436 + 46c: 2f ef ldi r18, 0xFF ; 255 + 46e: 81 ee ldi r24, 0xE1 ; 225 + 470: 94 e0 ldi r25, 0x04 ; 4 + 472: 21 50 subi r18, 0x01 ; 1 + 474: 80 40 sbci r24, 0x00 ; 0 + 476: 90 40 sbci r25, 0x00 ; 0 + 478: e1 f7 brne .-8 ; 0x472 + 47a: 00 c0 rjmp .+0 ; 0x47c + 47c: 00 00 nop + 47e: e4 cf rjmp .-56 ; 0x448 -000004bc <_GLOBAL__sub_I_l>: +00000480 <_GLOBAL__sub_I_l>: } else { - l.color(Led::BLUE); + //l.color(Led::BLUE); _delay_ms(1000); } } - 4bc: cf 93 push r28 - 4be: df 93 push r29 - 4c0: 00 d0 rcall .+0 ; 0x4c2 <_GLOBAL__sub_I_l+0x6> - 4c2: 1f 92 push r1 - 4c4: cd b7 in r28, 0x3d ; 61 - 4c6: de b7 in r29, 0x3e ; 62 -#include "Rs232.h" -#include "Can.h" -#include "Spi.h" + 480: cf 93 push r28 + 482: df 93 push r29 + 484: 1f 92 push r1 + 486: cd b7 in r28, 0x3d ; 61 + 488: de b7 in r29, 0x3e ; 62 + 48a: 3d 9a sbi 0x07, 5 ; 7 + 48c: 3e 9a sbi 0x07, 6 ; 7 + 48e: 3f 9a sbi 0x07, 7 ; 7 #include -Led l; - 4c8: 8a e0 ldi r24, 0x0A ; 10 - 4ca: 91 e0 ldi r25, 0x01 ; 1 - 4cc: 0e 94 fb 01 call 0x3f6 ; 0x3f6 <_ZN3LedC1Ev> +//Led l; +typedef Led ledclass; +ledclass l; Rs232 r; - 4d0: 89 e0 ldi r24, 0x09 ; 9 - 4d2: 91 e0 ldi r25, 0x01 ; 1 - 4d4: 0e 94 7e 02 call 0x4fc ; 0x4fc <_ZN5Rs232C1Ev> + 490: 87 e0 ldi r24, 0x07 ; 7 + 492: 91 e0 ldi r25, 0x01 ; 1 + 494: 0e 94 5a 02 call 0x4b4 ; 0x4b4 <_ZN5Rs232C1Ev> Can c(Spi(0)); - 4d8: 60 e0 ldi r22, 0x00 ; 0 - 4da: ce 01 movw r24, r28 - 4dc: 01 96 adiw r24, 0x01 ; 1 - 4de: 0e 94 b9 02 call 0x572 ; 0x572 <_ZN3SpiC1Eh> - 4e2: 49 81 ldd r20, Y+1 ; 0x01 - 4e4: 5a 81 ldd r21, Y+2 ; 0x02 - 4e6: 6b 81 ldd r22, Y+3 ; 0x03 - 4e8: 86 e0 ldi r24, 0x06 ; 6 - 4ea: 91 e0 ldi r25, 0x01 ; 1 - 4ec: 0e 94 04 01 call 0x208 ; 0x208 <_ZN3CanC1E3Spi> + 498: 60 e0 ldi r22, 0x00 ; 0 + 49a: ce 01 movw r24, r28 + 49c: 01 96 adiw r24, 0x01 ; 1 + 49e: 0e 94 92 02 call 0x524 ; 0x524 <_ZN3SpiC1Eh> + 4a2: 69 81 ldd r22, Y+1 ; 0x01 + 4a4: 86 e0 ldi r24, 0x06 ; 6 + 4a6: 91 e0 ldi r25, 0x01 ; 1 + 4a8: 0e 94 04 01 call 0x208 ; 0x208 <_ZN3CanC1E3Spi> } else { - l.color(Led::BLUE); + //l.color(Led::BLUE); _delay_ms(1000); } } - 4f0: 0f 90 pop r0 - 4f2: 0f 90 pop r0 - 4f4: 0f 90 pop r0 - 4f6: df 91 pop r29 - 4f8: cf 91 pop r28 - 4fa: 08 95 ret + 4ac: 0f 90 pop r0 + 4ae: df 91 pop r29 + 4b0: cf 91 pop r28 + 4b2: 08 95 ret -000004fc <_ZN5Rs232C1Ev>: +000004b4 <_ZN5Rs232C1Ev>: return 0; } void Rs232::init() { UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - 4fc: 86 e0 ldi r24, 0x06 ; 6 - 4fe: 80 93 ca 00 sts 0x00CA, r24 + 4b4: 86 e0 ldi r24, 0x06 ; 6 + 4b6: 80 93 ca 00 sts 0x00CA, r24 UCSR1B |= /*(1<: +000004cc <_ZN5Rs2324sendEPKc>: } void Rs232::send(const char * text) { while (*text) - 514: fb 01 movw r30, r22 - 516: 90 81 ld r25, Z - 518: 99 23 and r25, r25 - 51a: 51 f0 breq .+20 ; 0x530 <_ZN5Rs2324sendEPKc+0x1c> + 4cc: fb 01 movw r30, r22 + 4ce: 90 81 ld r25, Z + 4d0: 99 23 and r25, r25 + 4d2: 51 f0 breq .+20 ; 0x4e8 <_ZN5Rs2324sendEPKc+0x1c> UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 UCSR1B |= /*(1< + 4d6: 80 91 c8 00 lds r24, 0x00C8 + 4da: 85 ff sbrs r24, 5 + 4dc: fc cf rjmp .-8 ; 0x4d6 <_ZN5Rs2324sendEPKc+0xa> UDR1 = c; - 526: 90 93 ce 00 sts 0x00CE, r25 + 4de: 90 93 ce 00 sts 0x00CE, r25 UCSR1B |= /*(1< - 530: 08 95 ret + 4e2: 91 91 ld r25, Z+ + 4e4: 91 11 cpse r25, r1 + 4e6: f7 cf rjmp .-18 ; 0x4d6 <_ZN5Rs2324sendEPKc+0xa> + 4e8: 08 95 ret -00000532 <_ZN3Spi9init_portEv>: -#define CANP_MOSI PINB2 -#define CANP_SCK PINB1 -#define CANP_CS PINB4 +000004ea <_ZN3Spi9init_portEv>: -void Spi::init_port() { - CANDDR_SPI |= (1<: + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 4ea: 22 9a sbi 0x04, 2 ; 4 +namespace avrlib { -Spi::Spi(uint8_t index) : mode(1), canport(&PORTB) /* : m_index (index) {} */ { + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4ec: 2a 98 cbi 0x05, 2 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 4ee: 22 9a sbi 0x04, 2 ; 4 + 4f0: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4f2: 29 98 cbi 0x05, 1 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 4f4: 21 9a sbi 0x04, 1 ; 4 + 4f6: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4f8: 2c 9a sbi 0x05, 4 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 4fa: 24 9a sbi 0x04, 4 ; 4 + 4fc: 23 98 cbi 0x04, 3 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4fe: 2b 98 cbi 0x05, 3 ; 5 + 500: 2b 98 cbi 0x05, 3 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 502: 23 9a sbi 0x04, 3 ; 4 + 504: 08 95 ret + +00000506 <_ZN3Spi4initEv>: + +Spi::Spi(uint8_t index) : mode(1) { //, canport(&PORTB) /* : m_index (index) {} */ { init(); } void Spi::init() { - 554: cf 93 push r28 - 556: df 93 push r29 - 558: ec 01 movw r28, r24 + 506: cf 93 push r28 + 508: df 93 push r29 + 50a: ec 01 movw r28, r24 init_port(); - 55a: 0e 94 99 02 call 0x532 ; 0x532 <_ZN3Spi9init_portEv> + 50c: 0e 94 75 02 call 0x4ea ; 0x4ea <_ZN3Spi9init_portEv> if(mode == 0) { - 55e: 88 81 ld r24, Y - 560: 81 11 cpse r24, r1 - 562: 04 c0 rjmp .+8 ; 0x56c <_ZN3Spi4initEv+0x18> - *canport &= ~((1< + miso::make_input(); + miso::make_low(); } void Spi::init_spi() { SPCR = (1<: +00000524 <_ZN3SpiC1Eh>: * Author: netz */ #include "Spi.h" -Spi::Spi(uint8_t index) : mode(1), canport(&PORTB) /* : m_index (index) {} */ { - 572: 21 e0 ldi r18, 0x01 ; 1 - 574: fc 01 movw r30, r24 - 576: 20 83 st Z, r18 - 578: 25 e2 ldi r18, 0x25 ; 37 - 57a: 30 e0 ldi r19, 0x00 ; 0 - 57c: 32 83 std Z+2, r19 ; 0x02 - 57e: 21 83 std Z+1, r18 ; 0x01 +Spi::Spi(uint8_t index) : mode(1) { //, canport(&PORTB) /* : m_index (index) {} */ { + 524: 21 e0 ldi r18, 0x01 ; 1 + 526: fc 01 movw r30, r24 + 528: 20 83 st Z, r18 init(); - 580: 0c 94 aa 02 jmp 0x554 ; 0x554 <_ZN3Spi4initEv> + 52a: 0c 94 83 02 jmp 0x506 ; 0x506 <_ZN3Spi4initEv> -00000584 <_ZN3Spi5CSOffEv>: - SPCR = (1<: +namespace avrlib { -void Spi::CSOff() { - CANPORT_SPI |= (1<: -} + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } -void Spi::CSOn() { - CANPORT_SPI &= ~(1<: +00000534 <_ZN3Spi4CSOnEv>: +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 534: 2c 98 cbi 0x05, 4 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 536: 24 9a sbi 0x04, 4 ; 4 + 538: 08 95 ret + +0000053a <_ZN3Spi9send_softEh>: loop_until_bit_is_set(SPSR, SPIF); return SPDR; } uint8_t Spi::send_soft(uint8_t data) { - 58c: 98 e0 ldi r25, 0x08 ; 8 - uint8_t werti = 0; - 58e: 80 e0 ldi r24, 0x00 ; 0 - - for (uint8_t i = 8; i != 0; i--) { - CANPORT_SPI = (CANPORT_SPI & (~(1 << CANP_MOSI))) | ((data & 1) << CANP_MOSI); - 590: 60 fd sbrc r22, 0 - 592: 2a 9a sbi 0x05, 2 ; 5 - 594: 60 ff sbrs r22, 0 - 596: 2a 98 cbi 0x05, 2 ; 5 - CANPORT_SPI &= ~(1<>= 1; - 59a: 66 95 lsr r22 - ... - asm volatile ("nop");asm volatile ("nop");asm volatile ("nop");asm volatile ("nop"); - asm volatile ("nop");asm volatile ("nop");asm volatile ("nop");asm volatile ("nop"); - asm volatile ("nop");asm volatile ("nop");asm volatile ("nop");asm volatile ("nop"); - asm volatile ("nop");asm volatile ("nop");asm volatile ("nop");asm volatile ("nop"); - CANPORT_SPI |= (1<> CANP_MISO) & 1); - 5c0: 23 b1 in r18, 0x03 ; 3 - 5c2: 23 fb bst r18, 3 - 5c4: 22 27 eor r18, r18 - 5c6: 20 f9 bld r18, 0 - 5c8: 88 0f add r24, r24 - 5ca: 82 2b or r24, r18 - 5cc: 91 50 subi r25, 0x01 ; 1 + 53a: 98 e0 ldi r25, 0x08 ; 8 + uint8_t datain=0; + 53c: 80 e0 ldi r24, 0x00 ; 0 + 53e: 15 c0 rjmp .+42 ; 0x56a <_ZN3Spi9send_softEh+0x30> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 540: 2a 98 cbi 0x05, 2 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 542: 22 9a sbi 0x04, 2 ; 4 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 544: 25 e0 ldi r18, 0x05 ; 5 + 546: 2a 95 dec r18 + 548: f1 f7 brne .-4 ; 0x546 <_ZN3Spi9send_softEh+0xc> + 54a: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 54c: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 54e: 81 60 ori r24, 0x01 ; 1 + 550: 25 e0 ldi r18, 0x05 ; 5 + 552: 2a 95 dec r18 + 554: f1 f7 brne .-4 ; 0x552 <_ZN3Spi9send_softEh+0x18> + 556: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 558: 29 9a sbi 0x05, 1 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 55a: 21 9a sbi 0x04, 1 ; 4 + 55c: 2a e0 ldi r18, 0x0A ; 10 + 55e: 2a 95 dec r18 + 560: f1 f7 brne .-4 ; 0x55e <_ZN3Spi9send_softEh+0x24> + 562: 00 c0 rjmp .+0 ; 0x564 <_ZN3Spi9send_softEh+0x2a> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 564: 66 0f add r22, r22 + 566: 91 50 subi r25, 0x01 ; 1 + return SPDR; } uint8_t Spi::send_soft(uint8_t data) { - uint8_t werti = 0; - - for (uint8_t i = 8; i != 0; i--) { - 5ce: 01 f7 brne .-64 ; 0x590 <_ZN3Spi9send_softEh+0x4> - _delay_us(0.3); - CANPORT_SPI &= ~(1<0; a--){ //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 568: 41 f0 breq .+16 ; 0x57a <_ZN3Spi9send_softEh+0x40> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 56a: 88 0f add r24, r24 +namespace avrlib { -000005d2 <_ZN3Spi4sendEh>: + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 56c: 29 98 cbi 0x05, 1 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 56e: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 570: 67 ff sbrs r22, 7 + 572: e6 cf rjmp .-52 ; 0x540 <_ZN3Spi9send_softEh+0x6> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 574: 2a 9a sbi 0x05, 2 ; 5 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 576: 22 9a sbi 0x04, 2 ; 4 + 578: e5 cf rjmp .-54 ; 0x544 <_ZN3Spi9send_softEh+0xa> + CANPORT_SPI |= (1<> CANP_MISO) & 1); + } + return werti; */ + 57a: 08 95 ret + +0000057c <_ZN3Spi4sendEh>: void Spi::CSOn() { - CANPORT_SPI &= ~(1< + 57c: fc 01 movw r30, r24 + 57e: 20 81 ld r18, Z + 580: 21 11 cpse r18, r1 + 582: 06 c0 rjmp .+12 ; 0x590 <_ZN3Spi4sendEh+0x14> return send_soft(data); } uint8_t Spi::send_hard( uint8_t data ) { // Sendet ein Byte SPDR = data; - 5da: 6e bd out 0x2e, r22 ; 46 + 584: 6e bd out 0x2e, r22 ; 46 // Wartet bis Byte gesendet wurde loop_until_bit_is_set(SPSR, SPIF); - 5dc: 0d b4 in r0, 0x2d ; 45 - 5de: 07 fe sbrs r0, 7 - 5e0: fd cf rjmp .-6 ; 0x5dc <_ZN3Spi4sendEh+0xa> + 586: 0d b4 in r0, 0x2d ; 45 + 588: 07 fe sbrs r0, 7 + 58a: fd cf rjmp .-6 ; 0x586 <_ZN3Spi4sendEh+0xa> return SPDR; - 5e2: 8e b5 in r24, 0x2e ; 46 - 5e4: 08 95 ret + 58c: 8e b5 in r24, 0x2e ; 46 + 58e: 08 95 ret uint8_t Spi::send(uint8_t data) { if(mode == 0) { return send_hard(data); } return send_soft(data); - 5e6: 0c 94 c6 02 jmp 0x58c ; 0x58c <_ZN3Spi9send_softEh> + 590: 0c 94 9d 02 jmp 0x53a ; 0x53a <_ZN3Spi9send_softEh> -000005ea <__tablejump2__>: - 5ea: ee 0f add r30, r30 - 5ec: ff 1f adc r31, r31 +00000594 <__tablejump2__>: + 594: ee 0f add r30, r30 + 596: ff 1f adc r31, r31 -000005ee <__tablejump__>: - 5ee: 05 90 lpm r0, Z+ - 5f0: f4 91 lpm r31, Z - 5f2: e0 2d mov r30, r0 - 5f4: 09 94 ijmp +00000598 <__tablejump__>: + 598: 05 90 lpm r0, Z+ + 59a: f4 91 lpm r31, Z + 59c: e0 2d mov r30, r0 + 59e: 09 94 ijmp -000005f6 <_exit>: - 5f6: f8 94 cli +000005a0 <_exit>: + 5a0: f8 94 cli -000005f8 <__stop_program>: - 5f8: ff cf rjmp .-2 ; 0x5f8 <__stop_program> +000005a2 <__stop_program>: + 5a2: ff cf rjmp .-2 ; 0x5a2 <__stop_program> diff --git a/Mainboard/Mainboard/Debug/Mainboard.map b/Mainboard/Mainboard/Debug/Mainboard.map index 79f3b29..345a2cb 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.map +++ b/Mainboard/Mainboard/Debug/Mainboard.map @@ -22,14 +22,6 @@ Discarded input sections 0x00000000 0x154 Can.o .text 0x00000000 0x0 Led.o .bss 0x00000000 0x0 Led.o - .text._ZN3Led4initEv - 0x00000000 0x8 Led.o - .text._ZN3Led6uninitEv - 0x00000000 0x2 Led.o - .text._ZN3Led4fadeEiii - 0x00000000 0x68 Led.o - .text._ZN3Led7rainbowEh - 0x00000000 0x7a Led.o .text 0x00000000 0x0 Mainboard.o .text 0x00000000 0x0 Rs232.o .bss 0x00000000 0x0 Rs232.o @@ -228,7 +220,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0x5fa +.text 0x00000000 0x5a4 *(.vectors) .vectors 0x00000000 0x74 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o 0x00000000 __vector_default @@ -325,67 +317,60 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 0x0000011a 0xee Can.o 0x0000011a _ZN3Can8init_canEv .text._ZN3CanC2E3Spi - 0x00000208 0xc Can.o + 0x00000208 0x8 Can.o 0x00000208 _ZN3CanC2E3Spi 0x00000208 _ZN3CanC1E3Spi .text._ZN3Can18mcp2515_bit_modifyEhhh - 0x00000214 0x60 Can.o - 0x00000214 _ZN3Can18mcp2515_bit_modifyEhhh + 0x00000210 0x60 Can.o + 0x00000210 _ZN3Can18mcp2515_bit_modifyEhhh .text._ZN3Can22mcp2515_read_rx_statusEv - 0x00000274 0x40 Can.o - 0x00000274 _ZN3Can22mcp2515_read_rx_statusEv + 0x00000270 0x40 Can.o + 0x00000270 _ZN3Can22mcp2515_read_rx_statusEv .text._ZN3Can15can_get_messageEP10CANMessage - 0x000002b4 0x142 Can.o - 0x000002b4 _ZN3Can15can_get_messageEP10CANMessage - .text._ZN3LedC2Ev - 0x000003f6 0x8 Led.o - 0x000003f6 _ZN3LedC1Ev - 0x000003f6 _ZN3LedC2Ev - .text._ZN3Led5colorEh - 0x000003fe 0x14 Led.o - 0x000003fe _ZN3Led5colorEh + 0x000002b0 0x142 Can.o + 0x000002b0 _ZN3Can15can_get_messageEP10CANMessage .text.startup.main - 0x00000412 0xaa Mainboard.o - 0x00000412 main + 0x000003f2 0x8e Mainboard.o + 0x000003f2 main .text.startup._GLOBAL__sub_I_l - 0x000004bc 0x40 Mainboard.o + 0x00000480 0x34 Mainboard.o .text._ZN5Rs232C2Ev - 0x000004fc 0x18 Rs232.o - 0x000004fc _ZN5Rs232C2Ev - 0x000004fc _ZN5Rs232C1Ev + 0x000004b4 0x18 Rs232.o + 0x000004b4 _ZN5Rs232C2Ev + 0x000004b4 _ZN5Rs232C1Ev .text._ZN5Rs2324sendEPKc - 0x00000514 0x1e Rs232.o - 0x00000514 _ZN5Rs2324sendEPKc + 0x000004cc 0x1e Rs232.o + 0x000004cc _ZN5Rs2324sendEPKc .text._ZN3Spi9init_portEv - 0x00000532 0x22 Spi.o - 0x00000532 _ZN3Spi9init_portEv + 0x000004ea 0x1c Spi.o + 0x000004ea _ZN3Spi9init_portEv .text._ZN3Spi4initEv - 0x00000554 0x1e Spi.o - 0x00000554 _ZN3Spi4initEv + 0x00000506 0x1e Spi.o + 0x00000506 _ZN3Spi4initEv .text._ZN3SpiC2Eh - 0x00000572 0x12 Spi.o - 0x00000572 _ZN3SpiC1Eh - 0x00000572 _ZN3SpiC2Eh + 0x00000524 0xa Spi.o + 0x00000524 _ZN3SpiC1Eh + 0x00000524 _ZN3SpiC2Eh .text._ZN3Spi5CSOffEv - 0x00000584 0x4 Spi.o - 0x00000584 _ZN3Spi5CSOffEv + 0x0000052e 0x6 Spi.o + 0x0000052e _ZN3Spi5CSOffEv .text._ZN3Spi4CSOnEv - 0x00000588 0x4 Spi.o - 0x00000588 _ZN3Spi4CSOnEv + 0x00000534 0x6 Spi.o + 0x00000534 _ZN3Spi4CSOnEv .text._ZN3Spi9send_softEh - 0x0000058c 0x46 Spi.o - 0x0000058c _ZN3Spi9send_softEh + 0x0000053a 0x42 Spi.o + 0x0000053a _ZN3Spi9send_softEh .text._ZN3Spi4sendEh - 0x000005d2 0x18 Spi.o - 0x000005d2 _ZN3Spi4sendEh - .text.libgcc 0x000005ea 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_tablejump.o) - 0x000005ea __tablejump2__ - 0x000005ee __tablejump__ - 0x000005f6 . = ALIGN (0x2) + 0x0000057c 0x18 Spi.o + 0x0000057c _ZN3Spi4sendEh + .text.libgcc 0x00000594 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_tablejump.o) + 0x00000594 __tablejump2__ + 0x00000598 __tablejump__ + 0x000005a0 . = ALIGN (0x2) *(.fini9) - .fini9 0x000005f6 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) - 0x000005f6 _exit - 0x000005f6 exit + .fini9 0x000005a0 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + 0x000005a0 _exit + 0x000005a0 exit *(.fini9) *(.fini8) *(.fini8) @@ -404,11 +389,11 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x000005f6 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) + .fini0 0x000005a0 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_exit.o) *(.fini0) - 0x000005fa _etext = . + 0x000005a4 _etext = . -.data 0x00800100 0x6 load address 0x000005fa +.data 0x00800100 0x6 load address 0x000005a4 0x00800100 PROVIDE (__data_start, .) *(.data) .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr35/crtm32u2.o @@ -433,25 +418,25 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 0x00800106 _edata = . 0x00800106 PROVIDE (__data_end, .) -.bss 0x00800106 0x5 +.bss 0x00800106 0x3 0x00800106 PROVIDE (__bss_start, .) *(.bss) - .bss 0x00800106 0x5 Mainboard.o + .bss 0x00800106 0x3 Mainboard.o 0x00800106 c - 0x00800109 r - 0x0080010a l + 0x00800107 r + 0x00800108 l *(.bss*) *(COMMON) - 0x0080010b PROVIDE (__bss_end, .) - 0x000005fa __data_load_start = LOADADDR (.data) - 0x00000600 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x00800109 PROVIDE (__bss_end, .) + 0x000005a4 __data_load_start = LOADADDR (.data) + 0x000005aa __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x0080010b 0x0 - 0x0080010b PROVIDE (__noinit_start, .) +.noinit 0x00800109 0x0 + 0x00800109 PROVIDE (__noinit_start, .) *(.noinit*) - 0x0080010b PROVIDE (__noinit_end, .) - 0x0080010b _end = . - 0x0080010b PROVIDE (__heap_start, .) + 0x00800109 PROVIDE (__noinit_end, .) + 0x00800109 _end = . + 0x00800109 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -513,75 +498,73 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x160 +.debug_aranges 0x00000000 0x130 *(.debug_aranges) .debug_aranges 0x00000000 0x58 Can.o .debug_aranges - 0x00000058 0x48 Led.o + 0x00000058 0x18 Led.o .debug_aranges - 0x000000a0 0x28 Mainboard.o + 0x00000070 0x28 Mainboard.o .debug_aranges - 0x000000c8 0x38 Rs232.o + 0x00000098 0x38 Rs232.o .debug_aranges - 0x00000100 0x60 Spi.o + 0x000000d0 0x60 Spi.o .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x233b +.debug_info 0x00000000 0x31fa *(.debug_info) - .debug_info 0x00000000 0xdff Can.o - .debug_info 0x00000dff 0x564 Led.o - .debug_info 0x00001363 0x8d5 Mainboard.o - .debug_info 0x00001c38 0x27a Rs232.o - .debug_info 0x00001eb2 0x489 Spi.o + .debug_info 0x00000000 0xdec Can.o + .debug_info 0x00000dec 0x5d Led.o + .debug_info 0x00000e49 0xf68 Mainboard.o + .debug_info 0x00001db1 0x27a Rs232.o + .debug_info 0x0000202b 0x11cf Spi.o *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0xc52 +.debug_abbrev 0x00000000 0xc55 *(.debug_abbrev) - .debug_abbrev 0x00000000 0x350 Can.o - .debug_abbrev 0x00000350 0x22c Led.o - .debug_abbrev 0x0000057c 0x33d Mainboard.o - .debug_abbrev 0x000008b9 0x15b Rs232.o - .debug_abbrev 0x00000a14 0x23e Spi.o + .debug_abbrev 0x00000000 0x354 Can.o + .debug_abbrev 0x00000354 0x31 Led.o + .debug_abbrev 0x00000385 0x414 Mainboard.o + .debug_abbrev 0x00000799 0x15b Rs232.o + .debug_abbrev 0x000008f4 0x361 Spi.o -.debug_line 0x00000000 0x8ce +.debug_line 0x00000000 0x88d *(.debug_line) - .debug_line 0x00000000 0x2b3 Can.o - .debug_line 0x000002b3 0x16e Led.o - .debug_line 0x00000421 0x1d8 Mainboard.o - .debug_line 0x000005f9 0x122 Rs232.o - .debug_line 0x0000071b 0x1b3 Spi.o + .debug_line 0x00000000 0x2be Can.o + .debug_line 0x000002be 0x2c Led.o + .debug_line 0x000002ea 0x1f6 Mainboard.o + .debug_line 0x000004e0 0x122 Rs232.o + .debug_line 0x00000602 0x28b Spi.o -.debug_frame 0x00000000 0x35c +.debug_frame 0x00000000 0x2d8 *(.debug_frame) .debug_frame 0x00000000 0x180 Can.o - .debug_frame 0x00000180 0x84 Led.o - .debug_frame 0x00000204 0x54 Mainboard.o - .debug_frame 0x00000258 0x54 Rs232.o - .debug_frame 0x000002ac 0xb0 Spi.o + .debug_frame 0x00000180 0x54 Mainboard.o + .debug_frame 0x000001d4 0x54 Rs232.o + .debug_frame 0x00000228 0xb0 Spi.o -.debug_str 0x00000000 0x54c +.debug_str 0x00000000 0xf02 *(.debug_str) - .debug_str 0x00000000 0x38c Can.o - 0x3e4 (size before relaxing) - .debug_str 0x0000038c 0xbb Led.o - 0x185 (size before relaxing) - .debug_str 0x00000447 0xbe Mainboard.o - 0x4f9 (size before relaxing) - .debug_str 0x00000505 0x22 Rs232.o + .debug_str 0x00000000 0x38b Can.o + 0x3e3 (size before relaxing) + .debug_str 0x0000038b 0xd Led.o + 0xc7 (size before relaxing) + .debug_str 0x00000398 0x618 Mainboard.o + 0x9d0 (size before relaxing) + .debug_str 0x000009b0 0x22 Rs232.o 0x14b (size before relaxing) - .debug_str 0x00000527 0x25 Spi.o - 0x1c8 (size before relaxing) + .debug_str 0x000009d2 0x530 Spi.o + 0x757 (size before relaxing) -.debug_loc 0x00000000 0xdbb +.debug_loc 0x00000000 0xc7f *(.debug_loc) - .debug_loc 0x00000000 0x6f2 Can.o - .debug_loc 0x000006f2 0x2c1 Led.o - .debug_loc 0x000009b3 0x16d Mainboard.o - .debug_loc 0x00000b20 0x8a Rs232.o - .debug_loc 0x00000baa 0x211 Spi.o + .debug_loc 0x00000000 0x6ea Can.o + .debug_loc 0x000006ea 0xf5 Mainboard.o + .debug_loc 0x000007df 0x8a Rs232.o + .debug_loc 0x00000869 0x416 Spi.o .debug_macinfo *(.debug_macinfo) @@ -589,13 +572,12 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x188 +.debug_ranges 0x00000000 0x120 *(.debug_ranges) .debug_ranges 0x00000000 0x90 Can.o - .debug_ranges 0x00000090 0x68 Led.o - .debug_ranges 0x000000f8 0x18 Mainboard.o - .debug_ranges 0x00000110 0x28 Rs232.o - .debug_ranges 0x00000138 0x50 Spi.o + .debug_ranges 0x00000090 0x18 Mainboard.o + .debug_ranges 0x000000a8 0x28 Rs232.o + .debug_ranges 0x000000d0 0x50 Spi.o .debug_macro *(.debug_macro) diff --git a/Mainboard/Mainboard/Debug/Mainboard.srec b/Mainboard/Mainboard/Debug/Mainboard.srec index 5e4e4c0..21a107a 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.srec +++ b/Mainboard/Mainboard/Debug/Mainboard.srec @@ -6,20 +6,20 @@ S11300300C9463000C9463000C9463000C946300B0 S11300400C9463000C9463000C9463000C946300A0 S11300500C9463000C9463000C9463000C94630090 S11300600C9463000C9463000C9463000C94630080 -S11300700C9463005E0211241FBECFEFD4E0DEBFF8 -S1130080CDBF11E0A0E0B1E0EAEFF5E002C00590D9 +S11300700C946300400211241FBECFEFD4E0DEBF16 +S1130080CDBF11E0A0E0B1E0E4EAF5E002C00590E4 S11300900D92A630B107D9F721E0A6E0B1E001C086 -S11300A01D92AB30B207E1F710E0C6E7D0E004C020 -S11300B02297FE010E94F702C437D107C9F70E94B4 -S11300C009020C94FB020C940000FF920F931F93FF +S11300A01D92A930B207E1F710E0C6E7D0E004C022 +S11300B02297FE010E94CC02C437D107C9F70E94DF +S11300C0F9010C94D0020C940000FF920F931F933B S11300D0CF93DF931F92CDB7DEB7F82E092F162FDB -S11300E049830E94C40262E08F2D902F0E94E9028E -S11300F0612F8F2D902F0E94E9024981642F8F2D4B -S1130100902F0E94E9028F2D902F0F90DF91CF91B5 -S11301101F910F91FF900C94C202CF93DF93D82FBD -S1130120C92F0E94C40260EC8D2F9C2F0E94E9020B +S11300E049830E949A0262E08F2D902F0E94BE02E3 +S11300F0612F8F2D902F0E94BE024981642F8F2D76 +S1130100902F0E94BE028F2D902F0F90DF91CF91E0 +S11301101F910F91FF900C949702CF93DF93D82FE8 +S1130120C92F0E949A0260EC8D2F9C2F0E94BE0260 S11301308FE99FE00197F1F700C000008D2F9C2FFD -S11301400E94C2028FE39CE90197F1F700C000000E +S11301400E9497028FE39CE90197F1F700C0000039 S113015047E06AE28D2F9C2F0E94650040E969E226 S11301608D2F9C2F0E94650042E068E28D2F9C2F0A S11301700E94650043E06BE28D2F9C2F0E94650076 @@ -31,69 +31,64 @@ S11301C08D2F9C2F0E94650040E064E28D2F9C2FB0 S11301D00E94650040E065E28D2F9C2F0E9465001F S11301E040E066E28D2F9C2F0E94650040E067E2AC S11301F08D2F9C2F0E94650040E06CE08D2F9C2F7A -S1130200DF91CF910C946500FC014083518362839C -S11302100C948D00FF920F931F93CF93DF9300D024 -S1130220CDB7DEB7F82E092F162F2A8349830E94F3 -S1130230C40265E08F2D902F0E94E902612F8F2D5B -S1130240902F0E94E9024981642F8F2D902F0E94E4 -S1130250E9022A81622F8F2D902F0E94E9028F2DAF -S1130260902F0F900F90DF91CF911F910F91FF90DE -S11302700C94C2021F93CF93DF93D82FC92F0E94EF -S1130280C40260EB8D2F9C2F0E94E9026FEF8D2F2B -S11302909C2F0E94E902182F6FEF8D2F9C2F0E9434 -S11302A0E9028D2F9C2F0E94C202812FDF91CF91F2 -S11302B01F9108959F92AF92BF92CF92DF92EF92D7 -S11302C0FF920F931F93CF93DF931F92CDB7DEB7A7 -S11302D05C016B010E943A01982E8983898186FD15 -S11302E011C0898187FD7FC08FEF0F90DF91CF917F -S11302F01F910F91FF90EF90DF90CF90BF90AF9040 -S11303009F900895C5010E94C40260E9C5010E943E -S1130310E9026FEFC5010E94E902282F30E0220FA5 -S1130320331F220F331F220F331FF6013183208323 -S11303306FEFC5010E94E902482F50E0569547959A -S1130340529542954F7045275F704527F6012081ED -S11303503181242B352B318320836FEFC5010E941B -S1130360E9026FEFC5010E94E9026FEFC5010E9427 -S1130370E9028F70F60183838823A1F086010C5F64 -S11303801F4F7601F5E0EF0EF11C8150E80EF11CD1 -S11303906FEFC5010E94E902F80181938F01EE1508 -S11303A0FF05B1F7C5010E94C202898183FD0EC019 -S11303B0F6011282898120E086FF0FC041E06CE2E1 -S11303C0C5010E940A01892D87708FCF81E0F60153 -S11303D08283898120E086FDF1CF42E06CE2C50191 -S11303E00E940A01F0CFC5010E94C40264E9C5015C -S11303F00E94E9028ECF84B1806E84B9089585B1DC -S11304008F7185B985B16295660F607E682B65B979 -S11304100895CF93DF93CDB7DEB72C970FB6F8943A -S1130420DEBF0FBECDBF66E08AE091E00E94FF010F -S113043060E071E089E091E00E948A0283E291E049 -S11304409A8389831B8282E08C838FEA8D838EEF6B -S11304508E830EC061E08AE091E00E94FF012FEFDD -S113046083ED90E3215080409040E1F700C000000C -S113047062E08AE091E00E94FF012FEF81EE94E0B8 -S1130480215080409040E1F700C00000BE016F5F42 -S11304907F4F86E091E00E945A018F3FD9F664E0D5 -S11304A08AE091E00E94FF012FEF81EE94E0215059 -S11304B080409040E1F700C00000DACFCF93DF9393 -S11304C000D01F92CDB7DEB78AE091E00E94FB0115 -S11304D089E091E00E947E0260E0CE0101960E94D4 -S11304E0B90249815A816B8186E091E00E9404013E -S11304F00F900F900F90DF91CF91089586E0809335 -S1130500CA00E9ECF0E080818860808387E680930C -S1130510CC000895FB019081992351F0319680918C -S1130520C80085FFFCCF9093CE0091919111F7CF35 -S1130530089524B1266124B9239825B1217F25B9D2 -S1130540DC011196ED91FC9112978081817F80836B -S11305502C9A0895CF93DF93EC010E94990288812D -S1130560811104C080E58CBD81E08DBDDF91CF9108 -S1130570089521E0FC01208325E230E032832183C9 -S11305800C94AA022C9A08952C98089598E080E07F -S113059060FD2A9A60FF2A98299866950000000059 -S11305A00000000000000000000000000000000047 -S11305B0000000000000000000000000299A000074 -S11305C023B123FB222720F9880F822B915001F7B6 -S11305D00895FC012081211106C06EBD0DB407FEF3 -S11305E0FDCF8EB508950C94C602EE0FFF1F059043 -S10D05F0F491E02D0994F894FFCF74 -S10905FA626C610A0000BE +S1130200DF91CF910C946500FC0160830C948D0008 +S1130210FF920F931F93CF93DF9300D0CDB7DEB738 +S1130220F82E092F162F2A8349830E949A0265E02B +S11302308F2D902F0E94BE02612F8F2D902F0E9430 +S1130240BE024981642F8F2D902F0E94BE022A8105 +S1130250622F8F2D902F0E94BE028F2D902F0F9012 +S11302600F90DF91CF911F910F91FF900C94970203 +S11302701F93CF93DF93D82FC92F0E949A0260EB6C +S11302808D2F9C2F0E94BE026FEF8D2F9C2F0E94FA +S1130290BE02182F6FEF8D2F9C2F0E94BE028D2F50 +S11302A09C2F0E949702812FDF91CF911F91089577 +S11302B09F92AF92BF92CF92DF92EF92FF920F93F1 +S11302C01F93CF93DF931F92CDB7DEB75C016B0111 +S11302D00E943801982E8983898186FD11C0898105 +S11302E087FD7FC08FEF0F90DF91CF911F910F910A +S11302F0FF90EF90DF90CF90BF90AF909F900895C4 +S1130300C5010E949A0260E9C5010E94BE026FEF16 +S1130310C5010E94BE02282F30E0220F331F220F96 +S1130320331F220F331FF601318320836FEFC50182 +S11303300E94BE02482F50E056954795529542952B +S11303404F7045275F704527F60120813181242BAA +S1130350352B318320836FEFC5010E94BE026FEFFE +S1130360C5010E94BE026FEFC5010E94BE028F70DC +S1130370F60183838823A1F086010C5F1F4F760169 +S1130380F5E0EF0EF11C8150E80EF11C6FEFC50192 +S11303900E94BE02F80181938F01EE15FF05B1F7AB +S11303A0C5010E949702898183FD0EC0F601128265 +S11303B0898120E086FF0FC041E06CE2C5010E9404 +S11303C00801892D87708FCF81E0F60182838981AE +S11303D020E086FDF1CF42E06CE2C5010E940801F5 +S11303E0F0CFC5010E949A0264E9C5010E94BE02D1 +S11303F08ECFCF93DF93CDB7DEB72C970FB6F8949B +S1130400DEBF0FBECDBF47983F9A469A3E9A459AA3 +S11304103D9A60E071E087E091E00E94660283E229 +S113042091E09A8389831B8282E08C838FEA8D8397 +S11304308EEF8E8309C02FEF83ED90E3215080402F +S11304409040E1F700C000002FEF81EE94E02150CE +S113045080409040E1F700C00000BE016F5F7F4F15 +S113046086E091E00E9458018F3F29F72FEF81EE3B +S113047094E0215080409040E1F700C00000E4CFB8 +S1130480CF93DF931F92CDB7DEB73D9A3E9A3F9A42 +S113049087E091E00E945A0260E0CE0101960E943A +S11304A09202698186E091E00E9404010F90DF913D +S11304B0CF91089586E08093CA00E9ECF0E0808152 +S11304C08860808387E68093CC000895FB01908147 +S11304D0992351F031968091C80085FFFCCF909309 +S11304E0CE0091919111F7CF0895229A2A98229AD9 +S11304F0219A2998219A249A2C9A249A23982B9801 +S11305002B98239A0895CF93DF93EC010E947502F0 +S11305108881811104C080E58CBD81E08DBDDF91AF +S1130520CF91089521E0FC0120830C9483022C9A3E +S1130530249A08952C98249A089598E080E015C090 +S11305402A98229A25E02A95F1F700001B998160E8 +S113055025E02A95F1F70000299A219A2AE02A95A4 +S1130560F1F700C0660F915041F0880F2998219A45 +S113057067FFE6CF2A9A229AE5CF0895FC012081ED +S1130580211106C06EBD0DB407FEFDCF8EB50895D2 +S11305900C949D02EE0FFF1F0590F491E02D099439 +S10705A0F894FFCFF9 +S10905A4626C610A000014 S9030000FC diff --git a/Mainboard/Mainboard/Led.h b/Mainboard/Mainboard/Led.h index 8f13188..4b7f2bd 100644 --- a/Mainboard/Mainboard/Led.h +++ b/Mainboard/Mainboard/Led.h @@ -5,11 +5,11 @@ * Author: BlubbFish */ -#include "portc.hpp" -#include "pin.hpp" - #ifndef LED_H_ #define LED_H_ + +#include "pin.hpp" + template class Led { public: diff --git a/Mainboard/Mainboard/Mainboard.cpp b/Mainboard/Mainboard/Mainboard.cpp index a921cff..0871614 100644 --- a/Mainboard/Mainboard/Mainboard.cpp +++ b/Mainboard/Mainboard/Mainboard.cpp @@ -11,17 +11,25 @@ #include "Can.h" #include "Spi.h" #include "portc.hpp" +#include "portb.hpp"; #include -//Led l; -typedef Led l; +//////////////////// LED /////////////////////////////// +typedef Led ledclass; +ledclass l; + +typedef Spi spiclass; +spiclass s; + +typedef Rs232<9600> rs232class; +rs232class r; + Rs232 r; -Can c(Spi(0)); +Can c(s); int main(void) { - //l.color(Led::YELLOW); - l::color(l::YELLOW); + l.color(l.YELLOW); r.send("bla\n"); CANMessage m; m.id = 0x0123; diff --git a/Mainboard/Mainboard/Rs232.cpp b/Mainboard/Mainboard/Rs232.cpp index 5f2bb33..a3c3975 100644 --- a/Mainboard/Mainboard/Rs232.cpp +++ b/Mainboard/Mainboard/Rs232.cpp @@ -5,7 +5,7 @@ * Author: netz */ -#include "Rs232.h" +/* #include "Rs232.h" Rs232::Rs232() { init(); @@ -21,7 +21,7 @@ uint8_t Rs232::uart_putchar(uint8_t c) void Rs232::init() { UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - UCSR1B |= /*(1< #include +template class Rs232 { - private: - void init(); - uint8_t uart_putchar(uint8_t c); public: - Rs232(); - Rs232(int) {} - void send(const char *text); + Rs232() { + init(); + } + void send(const char *text) { + while (*text) + { + uart_putchar(*text); + text++; + } + } + private: + void init() { + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1<> CANP_MISO) & 1); } - return werti; */ -} \ No newline at end of file + return werti; *-/ +} */ \ No newline at end of file diff --git a/Mainboard/Mainboard/Spi.h b/Mainboard/Mainboard/Spi.h index 1df2512..9962542 100644 --- a/Mainboard/Mainboard/Spi.h +++ b/Mainboard/Mainboard/Spi.h @@ -13,30 +13,82 @@ #include #include #include "pin.hpp" -#include "portb.hpp" - +template class Spi { public: - Spi(uint8_t index); - void CSOn(); - void CSOff(); - uint8_t send(uint8_t data); + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + if(mode == 0) { + return send_hard(data); + } + return send_soft(data); + } private: - const uint8_t mode; //0 Hardware, 1 Software - const typedef avrlib::pin cs; - const typedef avrlib::pin miso; - const typedef avrlib::pin mosi; - const typedef avrlib::pin sck; - void init(); - void init_port(); - void init_spi(); - uint8_t send_soft(uint8_t data); - uint8_t send_hard(uint8_t data); - /*protected: - uint8_t m_index;*/ + const typedef avrlib::pin cs; + const typedef avrlib::pin miso; + const typedef avrlib::pin mosi; + const typedef avrlib::pin sck; + void init() { + init_port(); + if(mode == 0) { + init_spi(); + } + } + void init_port() { + mosi::make_output(); + mosi::make_low(); + sck::make_output(); + sck::make_low(); + cs::make_output(); + cs::make_high(); + miso::make_input(); + miso::make_low(); + } + void init_spi() { + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + mosi::make_high(); //Set Output High + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + { + datain |= 1; + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + } + return datain; + } + uint8_t send_hard(uint8_t data) { + // Sendet ein Byte + SPDR = data; + + // Wartet bis Byte gesendet wurde + loop_until_bit_is_set(SPSR, SPIF); + + return SPDR; + } }; - - #endif /* SPI_H_ */ \ No newline at end of file diff --git a/Mainboard/Mainboard/Spi.hpp b/Mainboard/Mainboard/Spi.hpp new file mode 100644 index 0000000..b77a5bc --- /dev/null +++ b/Mainboard/Mainboard/Spi.hpp @@ -0,0 +1,7 @@ + +/* + * Spi.hpp + * + * Created: 11.11.2013 18:01:21 + * Author: netz + */ diff --git a/Mainboard/Mainboard/config.h b/Mainboard/Mainboard/config.h index 121c732..01820f0 100644 --- a/Mainboard/Mainboard/config.h +++ b/Mainboard/Mainboard/config.h @@ -10,6 +10,5 @@ #define CONFIG_H_ #define F_CPU 16000000 -#define BAUD_RATE 9600 #endif /* CONFIG_H_ */ \ No newline at end of file