From 63e462ea6380284976c6931c20bc4776bc730a90 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Wed, 6 Nov 2013 18:36:04 +0000 Subject: [PATCH] 20131106-193619 --- Hardware/BackupFiles/Button.T3000A | Bin 260802 -> 260802 bytes Hardware/BackupFiles/Button.T3000B | Bin 260802 -> 260802 bytes Hardware/BackupFiles/Button.T3000C | Bin 260802 -> 260802 bytes Mainboard/Mainboard.atsuo | Bin 13824 -> 15872 bytes Mainboard/Mainboard/Can.cpp | 174 +-- Mainboard/Mainboard/Can.h | 6 +- Mainboard/Mainboard/Debug/Can.d | 4 +- Mainboard/Mainboard/Debug/Mainboard.d | 4 +- Mainboard/Mainboard/Debug/Mainboard.elf | Bin 25502 -> 28831 bytes Mainboard/Mainboard/Debug/Mainboard.hex | 164 ++- Mainboard/Mainboard/Debug/Mainboard.lss | 1631 ++++++++++++---------- Mainboard/Mainboard/Debug/Mainboard.map | 264 ++-- Mainboard/Mainboard/Debug/Mainboard.srec | 164 ++- Mainboard/Mainboard/Debug/Makefile | 19 +- Mainboard/Mainboard/Debug/Spi.d | 36 + Mainboard/Mainboard/Debug/makedep.mk | 2 + Mainboard/Mainboard/Mainboard.cpp | 11 +- Mainboard/Mainboard/Mainboard.cppproj | 8 +- Mainboard/Mainboard/Rs232.cpp | 2 +- Mainboard/Mainboard/Rs232.h | 2 +- Mainboard/Mainboard/Spi.cpp | 104 ++ Mainboard/Mainboard/Spi.h | 35 + 22 files changed, 1527 insertions(+), 1103 deletions(-) create mode 100644 Mainboard/Mainboard/Debug/Spi.d create mode 100644 Mainboard/Mainboard/Spi.cpp create mode 100644 Mainboard/Mainboard/Spi.h diff --git a/Hardware/BackupFiles/Button.T3000A b/Hardware/BackupFiles/Button.T3000A index 8fa3dd2e769f3f7b8aaa7fc89e32c346632c6c2f..80024b1928ca08e9d8e5187b9a544e1e85b10ca5 100644 GIT binary patch delta 37 scmX@~mH*IJ{te7bjL(}{nA%yG7=f5+I|~!@-{(vZ4{T?C#k^kt00e^#jQ{`u delta 37 scmX@~mH*IJ{te7bjK`Z000wM4ix|Z delta 38 tcmX@~mH*IJ{te7bjK`Z000kI4fOy3 diff --git a/Hardware/BackupFiles/Button.T3000C b/Hardware/BackupFiles/Button.T3000C index 43ac77dea7e3e5ad175ddd595fa79f7c698cd09d..80024b1928ca08e9d8e5187b9a544e1e85b10ca5 100644 GIT binary patch delta 38 tcmX@~mH*IJ{te7bjL(}{nA%yG7=f5+I|~!@-{;H^543M*dBwa>000wM4ix|Z delta 38 tcmX@~mH*IJ{te7bjK`Z000kI4fOy3 diff --git a/Mainboard/Mainboard.atsuo b/Mainboard/Mainboard.atsuo index cd93d355a0665e7142c6a525403d0a352f2d1ca6..095d318d31437c4e8e16de754dbd779de77f640f 100644 GIT binary patch delta 1066 zcmb_aUr1A76#u??ue)oyl_q0NYs2QEhi%S5E`_cc1x4&eNiR|x%b7H1x$A$;Sw4hM ztMe2h;zJLDQFftTiuNE`^he(cG%Dzif`Z71{y^(|*Odx;iugG9ob&sA-}%n(d^aA6 z_a;QDnXH+nTrnX8@-)(R3kGJi9cU$JztZV6B(>sXK%zIeh+#H(@V&#%?=zGw5 z(fTr2Kl(V@J)t&-r*@2B*kfn6Dzbit*O6R=j10~+qsZGND(pl=zX63*!3@-HEmu;7 zl2+J-3=_S6#^UGKXzMASV{`aJfm|lR6z7IinIy2O88(p)|C(sq22@Eo`~s^6vfHmC zR-{Td(EJ5V?!tF>zg9yr#JkdV8?6MJ#lh`nX+}w|jL8-XKgyrbA)xk4aK>I>c9Iae zh%3-jl=H}Zb4A>i8#7?Ij?X z>1U{MJ@#d+{Ko%fu{yzsA@N;b__oqQ8c zl1;RNIMvtp!I<@=z6&2b@9#fRO5HHVl|ZuCn|m1<1BC(aQJ5;PhJ^PJ^ZWq9SCpV; zlwJ?iL((NyWtSNvVSKo=>NAE(Oci=yW#moYwXVZISHCPgtlJ|OGNDSsTStEbcts@R delta 428 zcmZpuX~>!2z{t4K@i-&PzyJULPv&6?-~=%w85kJ;Z48{vIEf{PZ^7l`&)45P$H)v6 zY>=5;#d4C9Q31#X@h8tWQkxQjxRFFBe-Szl*7QX^I{6Dw5ad32WWf@3e~5NJB-+IUZPv9y_FbYOCWUZJ!PLn=cGgC0W$L(_^)CqsU4 zmwGPaid>>3)); - spi_putc((uint8_t) (p_message->id<<5)); + s.send((uint8_t) (p_message->id>>3)); + s.send((uint8_t) (p_message->id<<5)); // Extended ID - spi_putc(0x00); - spi_putc(0x00); + s.send(0x00); + s.send(0x00); uint8_t length = p_message->length; @@ -238,32 +192,32 @@ uint8_t Can::can_send_message(CANMessage *p_message) aber enthaelt keine Daten */ // Nachrichten Laenge + RTR einstellen - spi_putc((1<data[i]); + s.send(p_message->data[i]); } } - CANPORT_CS |= (1<id = (uint16_t) spi_putc(0xff) << 3; - p_message->id |= (uint16_t) spi_putc(0xff) >> 5; + p_message->id = (uint16_t) s.send(0xff) << 3; + p_message->id |= (uint16_t) s.send(0xff) >> 5; - spi_putc(0xff); - spi_putc(0xff); + s.send(0xff); + s.send(0xff); // Laenge auslesen - uint8_t length = spi_putc(0xff) & 0x0f; + uint8_t length = s.send(0xff) & 0x0f; p_message->length = length; // Daten auslesen for (uint8_t i=0;idata[i] = spi_putc(0xff); + p_message->data[i] = s.send(0xff); } - CANPORT_CS |= (1<rtr = 1; @@ -331,17 +285,17 @@ uint8_t Can::mcp2515_read_rx_status(void) uint8_t data; // /CS des MCP2515 auf Low ziehen - CANPORT_CS &= ~(1< #include "mcp2515_defs.h" #include "Led.h" +#include "Spi.h" #ifndef CAN_H_ #define CAN_H_ @@ -28,16 +29,15 @@ typedef struct class Can { private: - void init_spi(); void init_can(); - void init_pin(); uint8_t spi_putc( uint8_t data ); void mcp2515_write_register( uint8_t adress, uint8_t data ); 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(); + Can(Spi spi); uint8_t can_send_message(CANMessage *p_message); uint8_t can_get_message(CANMessage *p_message); }; diff --git a/Mainboard/Mainboard/Debug/Can.d b/Mainboard/Mainboard/Debug/Can.d index 13640cd..9216409 100644 --- a/Mainboard/Mainboard/Debug/Can.d +++ b/Mainboard/Mainboard/Debug/Can.d @@ -13,7 +13,7 @@ Can.d Can.o: .././Can.cpp .././Can.h .././config.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 .././Led.h + .././mcp2515_defs.h .././Led.h .././Spi.h .././Can.h: @@ -50,3 +50,5 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8- .././mcp2515_defs.h: .././Led.h: + +.././Spi.h: diff --git a/Mainboard/Mainboard/Debug/Mainboard.d b/Mainboard/Mainboard/Debug/Mainboard.d index d80b8f9..a897c94 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.d +++ b/Mainboard/Mainboard/Debug/Mainboard.d @@ -18,7 +18,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/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 + .././mcp2515_defs.h .././Spi.h .././config.h: @@ -63,3 +63,5 @@ 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/math.h: .././mcp2515_defs.h: + +.././Spi.h: diff --git a/Mainboard/Mainboard/Debug/Mainboard.elf b/Mainboard/Mainboard/Debug/Mainboard.elf index a39a0ce2ddacdeb81c52f239ce5f578189b59397..9b18bea3c90ce536328e685c2b1541ba076c9e34 100644 GIT binary patch literal 28831 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 QtgUWtt*dR0DeJ|50h7|r=>Px# literal 25502 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 diff --git a/Mainboard/Mainboard/Debug/Mainboard.hex b/Mainboard/Mainboard/Debug/Mainboard.hex index 00c71ae..6571d33 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.hex +++ b/Mainboard/Mainboard/Debug/Mainboard.hex @@ -5,80 +5,94 @@ :100040000C9463000C9463000C9463000C946300A4 :100050000C9463000C9463000C9463000C94630094 :100060000C9463000C9463000C9463000C94630084 -:100070000C9463004B0211241FBECFEFD4E0DEBF0F -:10008000CDBF11E0A0E0B1E0EAE1F5E002C00590EB +:100070000C9463005E0211241FBECFEFD4E0DEBFFC +:10008000CDBF11E0A0E0B1E0EAEFF5E002C00590DD :100090000D92A630B107D9F721E0A6E0B1E001C08A -:1000A0001D92A930B207E1F710E0C6E7D0E004C026 -:1000B0002297FE010E948702C437D107C9F70E9428 -:1000C000F9010C948B020C940000CF93DF9300D0C5 -:1000D000CDB7DEB76EBD65E0CE0102960E94EF019E -:1000E0000DB407FEFDCF60E0CE0101960E94EF0146 -:1000F0008EB50F900F90DF91CF91089584B18660F7 -:1001000084B985B1817F85B9249A2C9A089580E5B8 -:100110008CBD81E08DBD08950F931F93CF93DF9326 -:10012000EC01062F142F2C9862E00E946500602FCE -:10013000CE010E946500612FCE010E9465002C9ABD -:10014000DF91CF911F910F910895CF93DF93EC0131 -:100150002C9860EC0E9465008FE99FE00197F1F711 -:1001600000C000002C9A8FE39CE90197F1F700C0D2 -:10017000000047E06AE2CE010E948C0040E969E29B -:10018000CE010E948C0042E068E2CE010E948C0009 -:1001900043E06BE2CE010E948C0040E660E6CE01B7 -:1001A0000E948C0040E660E7CE010E948C0040E097 -:1001B00060E2CE010E948C0040E061E2CE010E942C -:1001C0008C0040E062E2CE010E948C0040E063E2DD -:1001D000CE010E948C0040E064E2CE010E948C00BF -:1001E00040E065E2CE010E948C0040E066E2CE0174 -:1001F0000E948C0040E067E2CE010E948C0040E04B -:100200006CE0CE010E948C00DF91CF910895CF93D6 -:10021000DF93EC018FE39CE90197F1F700C0000048 -:10022000CE010E947E00CE010E948700CE010E9476 -:10023000A500DF91CF910895FF920F931F93CF9365 -:10024000DF93EC01F62E042F122F2C9865E00E940C -:1002500065006F2DCE010E946500602FCE010E94C7 -:100260006500612FCE010E9465002C9ADF91CF912D -:100270001F910F91FF9008951F93CF93DF93EC018F -:100280002C9860EB0E9465006FEFCE010E94650024 -:10029000182F6FEFCE010E9465002C9A812FDF91FD -:1002A000CF911F910895AF92BF92CF92DF92EF92BC -:1002B000FF920F931F93CF93DF931F92CDB7DEB7BB -:1002C0007C016B010E943C018983898186FF06C005 -:1002D0002C9860E9C7010E94650009C089818823C4 -:1002E0000CF069C02C9864E9C7010E9465006FEFAB -:1002F000C7010E94650090E0880F991F880F991F21 -:10030000880F991FF601918380836FEFC7010E94C8 -:10031000650090E096958795929582958F708927D4 -:100320009F708927F60120813181822B932B918345 -:1003300080836FEFC7010E9465006FEFC7010E94C5 -:1003400065006FEFC7010E9465008F70F60183831F -:100350008823A1F086010C5F1F4F5601F5E0AF0E18 -:10036000B11C8150A80EB11C6FEFC7010E9465003F -:10037000F80181938F01EA15FB05B1F72C9A898169 -:1003800083FF04C081E0F601828302C0F60112827D -:10039000898186FF07C020E041E06CE2C7010E942E -:1003A0001C0106C020E042E06CE2C7010E941C0173 -:1003B0008981877001C08FEF0F90DF91CF911F91DE -:1003C0000F91FF90EF90DF90CF90BF90AF90089586 -:1003D00084B1806E84B908950E94E801089585B1C2 -:1003E0008F7185B985B16295660F607E682B65B99E -:1003F0000895CF93DF93CDB7DEB72C970FB6F8945F -:10040000DEBF0FBECDBF66E088E091E00E94EF0145 -:1004100060E071E087E091E00E94700283E291E089 -:100420009A8389831B8282E08C838FEA8D838EEF8F -:100430008E8362E088E091E00E94EF012FEF83ED70 -:1004400090E3215080409040E1F700C00000BE01E1 -:100450006F5F7F4F86E091E00E9453018F3F61F410 -:1004600064E088E091E00E94EF018FE39CE901974E -:10047000F1F700C00000DDCF61E088E091E00E946C -:10048000EF019FEF23ED80E3915020408040E1F7A2 -:1004900000C00000CECF88E091E00E94EC0187E030 -:1004A00091E00E946D0286E091E00E9407010895AC -:1004B000E8ECF0E0808185FFFDCF6093CE0080E026 -:1004C000089586E08093CA00E9ECF0E080818860BE -:1004D000808387E68093CC0008950E94610208958E -:1004E0000F931F93CF93DF938C01EB0168816623F9 -:1004F00039F02196C8010E94580269916111FACF22 -:10050000DF91CF911F910F910895EE0FFF1F05907E -:0A051000F491E02D0994F894FFCF58 -:06051A00626C610A0000A2 +:1000A0001D92AB30B207E1F710E0C6E7D0E004C024 +:1000B0002297FE010E94F702C437D107C9F70E94B8 +:1000C00009020C94FB020C940000FF920F931F9303 +:1000D000CF93DF931F92CDB7DEB7F82E092F162FDF +:1000E00049830E94C40262E08F2D902F0E94E90292 +:1000F000612F8F2D902F0E94E9024981642F8F2D4F +:10010000902F0E94E9028F2D902F0F90DF91CF91B9 +:100110001F910F91FF900C94C202CF93DF93D82FC1 +:10012000C92F0E94C40260EC8D2F9C2F0E94E9020F +:100130008FE99FE00197F1F700C000008D2F9C2F01 +:100140000E94C2028FE39CE90197F1F700C0000012 +:1001500047E06AE28D2F9C2F0E94650040E969E22A +:100160008D2F9C2F0E94650042E068E28D2F9C2F0E +:100170000E94650043E06BE28D2F9C2F0E9465007A +:1001800040E660E68D2F9C2F0E94650040E660E708 +:100190008D2F9C2F0E94650040E060E28D2F9C2FE8 +:1001A0000E94650040E061E28D2F9C2F0E94650057 +:1001B00040E062E28D2F9C2F0E94650040E063E2E8 +:1001C0008D2F9C2F0E94650040E064E28D2F9C2FB4 +: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 :00000001FF diff --git a/Mainboard/Mainboard/Debug/Mainboard.lss b/Mainboard/Mainboard/Debug/Mainboard.lss index a41bddd..0a9b025 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 0000051a 000005ae 2**0 + 0 .data 00000006 00800100 000005fa 0000068e 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 0000051a 00000000 00000000 00000094 2**1 + 1 .text 000005fa 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000003 00800106 00800106 000005b4 2**0 + 2 .bss 00000005 00800106 00800106 00000694 2**0 ALLOC - 3 .stab 000006cc 00000000 00000000 000005b4 2**2 + 3 .stab 000006cc 00000000 00000000 00000694 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 00000082 00000000 00000000 00000c80 2**0 + 4 .stabstr 00000082 00000000 00000000 00000d60 2**0 CONTENTS, READONLY, DEBUGGING - 5 .comment 0000002f 00000000 00000000 00000d02 2**0 + 5 .comment 0000002f 00000000 00000000 00000de2 2**0 CONTENTS, READONLY - 6 .debug_aranges 00000118 00000000 00000000 00000d31 2**0 + 6 .debug_aranges 00000160 00000000 00000000 00000e11 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00001e0f 00000000 00000000 00000e49 2**0 + 7 .debug_info 0000233b 00000000 00000000 00000f71 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 0000099e 00000000 00000000 00002c58 2**0 + 8 .debug_abbrev 00000c52 00000000 00000000 000032ac 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 0000072a 00000000 00000000 000035f6 2**0 + 9 .debug_line 000008ce 00000000 00000000 00003efe 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000338 00000000 00000000 00003d20 2**2 + 10 .debug_frame 0000035c 00000000 00000000 000047cc 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00000490 00000000 00000000 00004058 2**0 + 11 .debug_str 0000054c 00000000 00000000 00004b28 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00000d47 00000000 00000000 000044e8 2**0 + 12 .debug_loc 00000dbb 00000000 00000000 00005074 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000120 00000000 00000000 0000522f 2**0 + 13 .debug_ranges 00000188 00000000 00000000 00005e2f 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: 4b 02 muls r20, r27 + 74: 5e 02 muls r21, r30 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 e1 ldi r30, 0x1A ; 26 + 88: ea ef ldi r30, 0xFA ; 250 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: a9 30 cpi r26, 0x09 ; 9 + a2: ab 30 cpi r26, 0x0B ; 11 a4: b2 07 cpc r27, r18 a6: e1 f7 brne .-8 ; 0xa0 <.do_clear_bss_loop> @@ -110,926 +110,1143 @@ 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 87 02 call 0x50e ; 0x50e <__tablejump__> + b4: 0e 94 f7 02 call 0x5ee ; 0x5ee <__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 f9 01 call 0x3f2 ; 0x3f2
- c2: 0c 94 8b 02 jmp 0x516 ; 0x516 <_exit> + be: 0e 94 09 02 call 0x412 ; 0x412
+ c2: 0c 94 fb 02 jmp 0x5f6 ; 0x5f6 <_exit> 000000c6 <__bad_interrupt>: c6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> -000000ca <_ZN3Can8spi_putcEh>: - spi_putc((1< - - // Daten - for (uint8_t i=0;i - e0: 0d b4 in r0, 0x2d ; 45 - e2: 07 fe sbrs r0, 7 - e4: fd cf rjmp .-6 ; 0xe0 <_ZN3Can8spi_putcEh+0x16> - e6: 60 e0 ldi r22, 0x00 ; 0 - // Nachrichten Laenge einstellen - spi_putc(length); - - // Daten - for (uint8_t i=0;idata[i]); - e8: ce 01 movw r24, r28 - ea: 01 96 adiw r24, 0x01 ; 1 - ec: 0e 94 ef 01 call 0x3de ; 0x3de <_ZN3Led5colorEh> - f0: 8e b5 in r24, 0x2e ; 46 - f2: 0f 90 pop r0 - { - // Nachrichten Laenge einstellen - spi_putc(length); - - // Daten - for (uint8_t i=0;idata[i]); - } - } - CANPORT_CS |= (1<: - +000000ca <_ZN3Can22mcp2515_write_registerEhh>: asm volatile ("nop"); - fc: 84 b1 in r24, 0x04 ; 4 /* CAN Nachricht verschicken die letzten drei Bit im RTS Kommando geben an welcher Puffer gesendet werden soll */ - CANPORT_CS &= ~(1<: + ce: 1f 93 push r17 + d0: cf 93 push r28 + s.send(SPI_RTS | 0x01); + d2: df 93 push r29 + d4: 1f 92 push r1 + d6: cd b7 in r28, 0x3d ; 61 + d8: de b7 in r29, 0x3e ; 62 } else { - spi_putc(SPI_RTS | address); - 10e: 80 e5 ldi r24, 0x50 ; 80 - 110: 8c bd out 0x2c, r24 ; 44 - 112: 81 e0 ldi r24, 0x01 ; 1 - 114: 8d bd out 0x2d, r24 ; 45 - 116: 08 95 ret - -00000118 <_ZN3Can22mcp2515_write_registerEhh>: + s.send(SPI_RTS | address); } - CANPORT_CS |= (1< + 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> + 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> + fa: 49 81 ldd r20, Y+1 ; 0x01 + fc: 64 2f mov r22, r20 + */ + + if (bit_is_clear(status, 2)) { + address = 0x00; + } + else if (bit_is_clear(status, 4)) { + fe: 8f 2d mov r24, r15 + address = 0x02; + 100: 90 2f mov r25, r16 + 102: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_ZN3Spi4sendEh> + Puffer gesendet werden soll */ + s.CSOn(); // CS wieder Low + if (address == 0x00) { + s.send(SPI_RTS | 0x01); + } else { + s.send(SPI_RTS | address); + 106: 8f 2d mov r24, r15 + 108: 90 2f mov r25, r16 + 10a: 0f 90 pop r0 + 10c: df 91 pop r29 + 10e: cf 91 pop r28 + 110: 1f 91 pop r17 + s.send((1< + +0000011a <_ZN3Can8init_canEv>: + + // Daten + for (uint8_t i=0;i + 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> + 130: 8f e9 ldi r24, 0x9F ; 159 + 132: 9f e0 ldi r25, 0x0F ; 15 + 134: 01 97 sbiw r24, 0x01 ; 1 + // Nachrichten Laenge einstellen + s.send(length); + + // Daten + for (uint8_t i=0;idata[i]); + 136: f1 f7 brne .-4 ; 0x134 <_ZN3Can8init_canEv+0x1a> + 138: 00 c0 rjmp .+0 ; 0x13a <_ZN3Can8init_canEv+0x20> + 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> + { + // Nachrichten Laenge einstellen + s.send(length); + + // Daten + for (uint8_t i=0;i + address = 0x00; + 14c: 00 c0 rjmp .+0 ; 0x14e <_ZN3Can8init_canEv+0x34> + 14e: 00 00 nop address = 0x04; } else { /* Alle Puffer sind belegt, Nachricht kann nicht verschickt werden */ return 0; - 11e: df 93 push r29 - spi_putc(SPI_RTS | address); - } - CANPORT_CS |= (1< - 12e: 60 2f mov r22, r16 - 130: ce 01 movw r24, r28 - 132: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - 136: 61 2f mov r22, r17 - // /CS des MCP2515 auf Low ziehen - CANPORT_CS &= ~(1< - - // /CS Leitung wieder freigeben - CANPORT_CS |= (1<: - SPCR = (1< - #else - //round up by default - __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); - #endif - - __builtin_avr_delay_cycles(__ticks_dc); - 158: 8f e9 ldi r24, 0x9F ; 159 - 15a: 9f e0 ldi r25, 0x0F ; 15 - 15c: 01 97 sbiw r24, 0x01 ; 1 - 15e: f1 f7 brne .-4 ; 0x15c <_ZN3Can8init_canEv+0x12> - 160: 00 c0 rjmp .+0 ; 0x162 <_ZN3Can8init_canEv+0x18> - 162: 00 00 nop - _delay_ms(1); - CANPORT_CS |= (1< - 16e: 00 c0 rjmp .+0 ; 0x170 <_ZN3Can8init_canEv+0x26> - 170: 00 00 nop + 150: 47 e0 ldi r20, 0x07 ; 7 + 152: 6a e2 ldi r22, 0x2A ; 42 * Bus speed = 1 / (Total # of TQ) * TQ * = 1 / 8 * TQ = 125 kHz */ -//return; + // BRP = 7 mcp2515_write_register( CNF1, (1< -//return; + 154: 8d 2f mov r24, r29 + 156: 9c 2f mov r25, r28 + 158: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> + // Prop Seg und Phase Seg1 einstellen mcp2515_write_register( CNF2, (1< -//return; + 15c: 40 e9 ldi r20, 0x90 ; 144 + 15e: 69 e2 ldi r22, 0x29 ; 41 + 160: 8d 2f mov r24, r29 + 162: 9c 2f mov r25, r28 + 164: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> + // Wake-up Filter deaktivieren, Phase Seg2 einstellen mcp2515_write_register( CNF3, (1< -//return; + 168: 42 e0 ldi r20, 0x02 ; 2 + 16a: 68 e2 ldi r22, 0x28 ; 40 + 16c: 8d 2f mov r24, r29 + 16e: 9c 2f mov r25, r28 + 170: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> + // Aktivieren der Rx Buffer Interrupts mcp2515_write_register( CANINTE, (1< + 174: 43 e0 ldi r20, 0x03 ; 3 + 176: 6b e2 ldi r22, 0x2B ; 43 + 178: 8d 2f mov r24, r29 + 17a: 9c 2f mov r25, r28 + 17c: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> /* * Einstellen der Filter */ // Buffer 0 : Empfangen aller Nachrichten mcp2515_write_register( RXB0CTRL, (1< + 180: 40 e6 ldi r20, 0x60 ; 96 + 182: 60 e6 ldi r22, 0x60 ; 96 + 184: 8d 2f mov r24, r29 + 186: 9c 2f mov r25, r28 + 188: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> // Buffer 1 : Empfangen aller Nachrichten mcp2515_write_register( RXB1CTRL, (1< -//return; + 18c: 40 e6 ldi r20, 0x60 ; 96 + 18e: 60 e7 ldi r22, 0x70 ; 112 + 190: 8d 2f mov r24, r29 + 192: 9c 2f mov r25, r28 + 194: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> + // Alle Bits der Empfangsmaske loeschen, // damit werden alle Nachrichten empfangen mcp2515_write_register( RXM0SIDH, 0 ); //return; - 1ae: 40 e0 ldi r20, 0x00 ; 0 - 1b0: 60 e2 ldi r22, 0x20 ; 32 - 1b2: ce 01 movw r24, r28 - 1b4: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 198: 40 e0 ldi r20, 0x00 ; 0 + 19a: 60 e2 ldi r22, 0x20 ; 32 + 19c: 8d 2f mov r24, r29 + 19e: 9c 2f mov r25, r28 + 1a0: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> mcp2515_write_register( RXM0SIDL, 0 ); //return; - 1b8: 40 e0 ldi r20, 0x00 ; 0 - 1ba: 61 e2 ldi r22, 0x21 ; 33 - 1bc: ce 01 movw r24, r28 - 1be: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 1a4: 40 e0 ldi r20, 0x00 ; 0 + 1a6: 61 e2 ldi r22, 0x21 ; 33 + 1a8: 8d 2f mov r24, r29 + 1aa: 9c 2f mov r25, r28 + 1ac: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> mcp2515_write_register( RXM0EID8, 0 ); - 1c2: 40 e0 ldi r20, 0x00 ; 0 - 1c4: 62 e2 ldi r22, 0x22 ; 34 - 1c6: ce 01 movw r24, r28 - 1c8: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 1b0: 40 e0 ldi r20, 0x00 ; 0 + 1b2: 62 e2 ldi r22, 0x22 ; 34 + 1b4: 8d 2f mov r24, r29 + 1b6: 9c 2f mov r25, r28 + 1b8: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> mcp2515_write_register( RXM0EID0, 0 ); - 1cc: 40 e0 ldi r20, 0x00 ; 0 - 1ce: 63 e2 ldi r22, 0x23 ; 35 - 1d0: ce 01 movw r24, r28 - 1d2: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> -//return; + 1bc: 40 e0 ldi r20, 0x00 ; 0 + 1be: 63 e2 ldi r22, 0x23 ; 35 + 1c0: 8d 2f mov r24, r29 + 1c2: 9c 2f mov r25, r28 + 1c4: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> + mcp2515_write_register( RXM1SIDH, 0 ); //return; - 1d6: 40 e0 ldi r20, 0x00 ; 0 - 1d8: 64 e2 ldi r22, 0x24 ; 36 - 1da: ce 01 movw r24, r28 - 1dc: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 1c8: 40 e0 ldi r20, 0x00 ; 0 + 1ca: 64 e2 ldi r22, 0x24 ; 36 + 1cc: 8d 2f mov r24, r29 + 1ce: 9c 2f mov r25, r28 + 1d0: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> mcp2515_write_register( RXM1SIDL, 0 ); //return; - 1e0: 40 e0 ldi r20, 0x00 ; 0 - 1e2: 65 e2 ldi r22, 0x25 ; 37 - 1e4: ce 01 movw r24, r28 - 1e6: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 1d4: 40 e0 ldi r20, 0x00 ; 0 + 1d6: 65 e2 ldi r22, 0x25 ; 37 + 1d8: 8d 2f mov r24, r29 + 1da: 9c 2f mov r25, r28 + 1dc: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> mcp2515_write_register( RXM1EID8, 0 ); - 1ea: 40 e0 ldi r20, 0x00 ; 0 - 1ec: 66 e2 ldi r22, 0x26 ; 38 - 1ee: ce 01 movw r24, r28 - 1f0: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 1e0: 40 e0 ldi r20, 0x00 ; 0 + 1e2: 66 e2 ldi r22, 0x26 ; 38 + 1e4: 8d 2f mov r24, r29 + 1e6: 9c 2f mov r25, r28 + 1e8: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> mcp2515_write_register( RXM1EID0, 0 ); - 1f4: 40 e0 ldi r20, 0x00 ; 0 - 1f6: 67 e2 ldi r22, 0x27 ; 39 - 1f8: ce 01 movw r24, r28 - 1fa: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 1ec: 40 e0 ldi r20, 0x00 ; 0 + 1ee: 67 e2 ldi r22, 0x27 ; 39 + 1f0: 8d 2f mov r24, r29 + 1f2: 9c 2f mov r25, r28 + 1f4: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> /* * Einstellen der Pin Funktionen */ // Deaktivieren der Pins RXnBF Pins (High Impedance State) mcp2515_write_register( BFPCTRL, 0 ); return; - 1fe: 40 e0 ldi r20, 0x00 ; 0 - 200: 6c e0 ldi r22, 0x0C ; 12 - 202: ce 01 movw r24, r28 - 204: 0e 94 8c 00 call 0x118 ; 0x118 <_ZN3Can22mcp2515_write_registerEhh> + 1f8: 40 e0 ldi r20, 0x00 ; 0 + 1fa: 6c e0 ldi r22, 0x0C ; 12 + 1fc: 8d 2f mov r24, r29 + 1fe: 9c 2f mov r25, r28 // TXnRTS Bits als Inputs schalten mcp2515_write_register( TXRTSCTRL, 0 ); -//return; + // Device zurueck in den normalen Modus versetzten mcp2515_bit_modify( CANCTRL, 0xE0, 0); } - 208: df 91 pop r29 - 20a: cf 91 pop r28 - 20c: 08 95 ret + 200: df 91 pop r29 + 202: cf 91 pop r28 + /* + * Einstellen der Pin Funktionen + */ + + // Deaktivieren der Pins RXnBF Pins (High Impedance State) + mcp2515_write_register( BFPCTRL, 0 ); return; + 204: 0c 94 65 00 jmp 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> -0000020e <_ZN3CanC1Ev>: +00000208 <_ZN3CanC1E3Spi>: + * Author: netz + */ -#define CANDDR_RST DDRD -#define CANPORT_RST PORTD -#define CANP_RST PIND6 +#include "Can.h" -Can::Can() { - 20e: cf 93 push r28 - 210: df 93 push r29 - 212: ec 01 movw r28, r24 - 214: 8f e3 ldi r24, 0x3F ; 63 - 216: 9c e9 ldi r25, 0x9C ; 156 - 218: 01 97 sbiw r24, 0x01 ; 1 - 21a: f1 f7 brne .-4 ; 0x218 <_ZN3CanC1Ev+0xa> - 21c: 00 c0 rjmp .+0 ; 0x21e <_ZN3CanC1Ev+0x10> - 21e: 00 00 nop - _delay_ms(10); - init_pin(); - 220: ce 01 movw r24, r28 - 222: 0e 94 7e 00 call 0xfc ; 0xfc <_ZN3Can8init_pinEv> - init_spi(); - 226: ce 01 movw r24, r28 - 228: 0e 94 87 00 call 0x10e ; 0x10e <_ZN3Can8init_spiEv> +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 init_can(); - 22c: ce 01 movw r24, r28 - 22e: 0e 94 a5 00 call 0x14a ; 0x14a <_ZN3Can8init_canEv> -} - 232: df 91 pop r29 - 234: cf 91 pop r28 - 236: 08 95 ret + 210: 0c 94 8d 00 jmp 0x11a ; 0x11a <_ZN3Can8init_canEv> -00000238 <_ZN3Can18mcp2515_bit_modifyEhhh>: +00000214 <_ZN3Can18mcp2515_bit_modifyEhhh>: return data; } void Can::mcp2515_bit_modify(uint8_t adress, uint8_t mask, uint8_t data) { - 238: ff 92 push r15 - 23a: 0f 93 push r16 - 23c: 1f 93 push r17 - 23e: cf 93 push r28 - 240: df 93 push r29 - 242: ec 01 movw r28, r24 - 244: f6 2e mov r15, r22 - 246: 04 2f mov r16, r20 - 248: 12 2f mov r17, r18 + 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 // /CS des MCP2515 auf Low ziehen - CANPORT_CS &= ~(1< - spi_putc(SPI_BIT_MODIFY); - 24c: 65 e0 ldi r22, 0x05 ; 5 - 24e: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - spi_putc(adress); - 252: 6f 2d mov r22, r15 - 254: ce 01 movw r24, r28 - 256: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - spi_putc(mask); - 25a: 60 2f mov r22, r16 - 25c: ce 01 movw r24, r28 - 25e: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - spi_putc(data); - 262: 61 2f mov r22, r17 - 264: ce 01 movw r24, r28 - 266: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> + 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> + 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> + 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> + 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> // /CS Leitung wieder freigeben - CANPORT_CS |= (1< -00000278 <_ZN3Can22mcp2515_read_rx_statusEv>: +00000274 <_ZN3Can22mcp2515_read_rx_statusEv>: return (status & 0x07); } uint8_t Can::mcp2515_read_rx_status(void) { - 278: 1f 93 push r17 - 27a: cf 93 push r28 - 27c: df 93 push r29 - 27e: ec 01 movw r28, r24 + 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 uint8_t data; // /CS des MCP2515 auf Low ziehen - CANPORT_CS &= ~(1< - spi_putc(SPI_RX_STATUS); + s.send(SPI_RX_STATUS); 282: 60 eb ldi r22, 0xB0 ; 176 - 284: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - data = spi_putc(0xff); - 288: 6f ef ldi r22, 0xFF ; 255 - 28a: ce 01 movw r24, r28 - 28c: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - 290: 18 2f mov r17, r24 + 284: 8d 2f mov r24, r29 + 286: 9c 2f mov r25, r28 + 288: 0e 94 e9 02 call 0x5d2 ; 0x5d2 <_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 // Die Daten werden noch einmal wiederholt gesendet, // man braucht also nur eins der beiden Bytes auswerten. - spi_putc(0xff); - 292: 6f ef ldi r22, 0xFF ; 255 - 294: ce 01 movw r24, r28 - 296: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> + 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> // /CS Leitung wieder freigeben - CANPORT_CS |= (1< return data; - 29c: 81 2f mov r24, r17 - 29e: df 91 pop r29 - 2a0: cf 91 pop r28 - 2a2: 1f 91 pop r17 - 2a4: 08 95 ret + 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 -000002a6 <_ZN3Can15can_get_messageEP10CANMessage>: +000002b4 <_ZN3Can15can_get_messageEP10CANMessage>: return 1; } uint8_t Can::can_get_message(CANMessage *p_message) { - 2a6: af 92 push r10 - 2a8: bf 92 push r11 - 2aa: cf 92 push r12 - 2ac: df 92 push r13 - 2ae: ef 92 push r14 - 2b0: ff 92 push r15 - 2b2: 0f 93 push r16 - 2b4: 1f 93 push r17 - 2b6: cf 93 push r28 - 2b8: df 93 push r29 - 2ba: 1f 92 push r1 - 2bc: cd b7 in r28, 0x3d ; 61 - 2be: de b7 in r29, 0x3e ; 62 - 2c0: 7c 01 movw r14, r24 - 2c2: 6b 01 movw r12, r22 + 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 // Status auslesen uint8_t status = mcp2515_read_rx_status(); - 2c4: 0e 94 3c 01 call 0x278 ; 0x278 <_ZN3Can22mcp2515_read_rx_statusEv> - 2c8: 89 83 std Y+1, r24 ; 0x01 + 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 + + 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> + // 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> + 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 + } else { + mcp2515_bit_modify(CANINTF, (1< { // Nachricht in Puffer 0 - CANPORT_CS &= ~(1< - 2da: 09 c0 rjmp .+18 ; 0x2ee <_ZN3Can15can_get_messageEP10CANMessage+0x48> - } - else if (bit_is_set(status,7)) - 2dc: 89 81 ldd r24, Y+1 ; 0x01 - 2de: 88 23 and r24, r24 - 2e0: 0c f0 brlt .+2 ; 0x2e4 <_ZN3Can15can_get_messageEP10CANMessage+0x3e> - 2e2: 69 c0 rjmp .+210 ; 0x3b6 <_ZN3Can15can_get_messageEP10CANMessage+0x110> - { - // Nachricht in Puffer 1 - - CANPORT_CS &= ~(1< + s.CSOn(); // CS Low + 304: c5 01 movw r24, r10 + 306: 0e 94 c4 02 call 0x588 ; 0x588 <_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> /* Fehler: Keine neue Nachricht vorhanden */ return 0xff; } // Standard ID auslesen - p_message->id = (uint16_t) spi_putc(0xff) << 3; - 2ee: 6f ef ldi r22, 0xFF ; 255 - 2f0: c7 01 movw r24, r14 - 2f2: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - 2f6: 90 e0 ldi r25, 0x00 ; 0 - 2f8: 88 0f add r24, r24 - 2fa: 99 1f adc r25, r25 - 2fc: 88 0f add r24, r24 - 2fe: 99 1f adc r25, r25 - 300: 88 0f add r24, r24 - 302: 99 1f adc r25, r25 - 304: f6 01 movw r30, r12 - 306: 91 83 std Z+1, r25 ; 0x01 - 308: 80 83 st Z, r24 - p_message->id |= (uint16_t) spi_putc(0xff) >> 5; - 30a: 6f ef ldi r22, 0xFF ; 255 - 30c: c7 01 movw r24, r14 - 30e: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - 312: 90 e0 ldi r25, 0x00 ; 0 - 314: 96 95 lsr r25 - 316: 87 95 ror r24 - 318: 92 95 swap r25 - 31a: 82 95 swap r24 - 31c: 8f 70 andi r24, 0x0F ; 15 - 31e: 89 27 eor r24, r25 - 320: 9f 70 andi r25, 0x0F ; 15 - 322: 89 27 eor r24, r25 - 324: f6 01 movw r30, r12 - 326: 20 81 ld r18, Z - 328: 31 81 ldd r19, Z+1 ; 0x01 - 32a: 82 2b or r24, r18 - 32c: 93 2b or r25, r19 - 32e: 91 83 std Z+1, r25 ; 0x01 - 330: 80 83 st Z, r24 + 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 + 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 + 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 + 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 - spi_putc(0xff); - 332: 6f ef ldi r22, 0xFF ; 255 - 334: c7 01 movw r24, r14 - 336: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - spi_putc(0xff); - 33a: 6f ef ldi r22, 0xFF ; 255 - 33c: c7 01 movw r24, r14 - 33e: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> + 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> + 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> // Laenge auslesen - uint8_t length = spi_putc(0xff) & 0x0f; - 342: 6f ef ldi r22, 0xFF ; 255 - 344: c7 01 movw r24, r14 - 346: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - 34a: 8f 70 andi r24, 0x0F ; 15 + 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 p_message->length = length; - 34c: f6 01 movw r30, r12 - 34e: 83 83 std Z+3, r24 ; 0x03 + 374: f6 01 movw r30, r12 + 376: 83 83 std Z+3, r24 ; 0x03 // Daten auslesen for (uint8_t i=0;i - CANPORT_CS |= (1< + s.CSOff(); // CS auf High return 1; } uint8_t Can::can_get_message(CANMessage *p_message) - 354: 86 01 movw r16, r12 - 356: 0c 5f subi r16, 0xFC ; 252 - 358: 1f 4f sbci r17, 0xFF ; 255 - 35a: 56 01 movw r10, r12 - 35c: f5 e0 ldi r31, 0x05 ; 5 - 35e: af 0e add r10, r31 - 360: b1 1c adc r11, r1 - 362: 81 50 subi r24, 0x01 ; 1 - 364: a8 0e add r10, r24 - 366: b1 1c adc r11, r1 - uint8_t length = spi_putc(0xff) & 0x0f; + 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 + uint8_t length = s.send(0xff) & 0x0f; p_message->length = length; // Daten auslesen for (uint8_t i=0;idata[i] = spi_putc(0xff); - 368: 6f ef ldi r22, 0xFF ; 255 - 36a: c7 01 movw r24, r14 - 36c: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can8spi_putcEh> - 370: f8 01 movw r30, r16 - 372: 81 93 st Z+, r24 - 374: 8f 01 movw r16, r30 + p_message->data[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 // Laenge auslesen - uint8_t length = spi_putc(0xff) & 0x0f; + uint8_t length = s.send(0xff) & 0x0f; p_message->length = length; // Daten auslesen for (uint8_t i=0;i - p_message->data[i] = spi_putc(0xff); + 39e: ee 15 cp r30, r14 + 3a0: ff 05 cpc r31, r15 + 3a2: b1 f7 brne .-20 ; 0x390 <_ZN3Can15can_get_messageEP10CANMessage+0xdc> + p_message->data[i] = s.send(0xff); } - CANPORT_CS |= (1< if (bit_is_set(status,3)) { - 37e: 89 81 ldd r24, Y+1 ; 0x01 - 380: 83 ff sbrs r24, 3 - 382: 04 c0 rjmp .+8 ; 0x38c <_ZN3Can15can_get_messageEP10CANMessage+0xe6> + 3aa: 89 81 ldd r24, Y+1 ; 0x01 + 3ac: 83 fd sbrc r24, 3 + 3ae: 0e c0 rjmp .+28 ; 0x3cc <_ZN3Can15can_get_messageEP10CANMessage+0x118> p_message->rtr = 1; - 384: 81 e0 ldi r24, 0x01 ; 1 - 386: f6 01 movw r30, r12 - 388: 82 83 std Z+2, r24 ; 0x02 - 38a: 02 c0 rjmp .+4 ; 0x390 <_ZN3Can15can_get_messageEP10CANMessage+0xea> } else { p_message->rtr = 0; - 38c: f6 01 movw r30, r12 - 38e: 12 82 std Z+2, r1 ; 0x02 + 3b0: f6 01 movw r30, r12 + 3b2: 12 82 std Z+2, r1 ; 0x02 } // Interrupt Flag loeschen if (bit_is_set(status,6)) { - 390: 89 81 ldd r24, Y+1 ; 0x01 - 392: 86 ff sbrs r24, 6 - 394: 07 c0 rjmp .+14 ; 0x3a4 <_ZN3Can15can_get_messageEP10CANMessage+0xfe> + 3b4: 89 81 ldd r24, Y+1 ; 0x01 mcp2515_bit_modify(CANINTF, (1< - 3a2: 06 c0 rjmp .+12 ; 0x3b0 <_ZN3Can15can_get_messageEP10CANMessage+0x10a> + 3b6: 20 e0 ldi r18, 0x00 ; 0 } else { - mcp2515_bit_modify(CANINTF, (1< + p_message->rtr = 0; } - return (status & 0x07); - 3b0: 89 81 ldd r24, Y+1 ; 0x01 - 3b2: 87 70 andi r24, 0x07 ; 7 - 3b4: 01 c0 rjmp .+2 ; 0x3b8 <_ZN3Can15can_get_messageEP10CANMessage+0x112> - CANPORT_CS &= ~(1< + mcp2515_bit_modify(CANINTF, (1< } else { mcp2515_bit_modify(CANINTF, (1< + } + + 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 + } else { + p_message->rtr = 0; + } + + // Interrupt Flag loeschen + if (bit_is_set(status,6)) { + 3d2: 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> + mcp2515_bit_modify(CANINTF, (1< + 3e4: f0 cf rjmp .-32 ; 0x3c6 <_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> + 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> -000003d0 <_ZN3Led4initEv>: +000003f6 <_ZN3LedC1Ev>: Led::Led() { init(); } void Led::init() { LEDDDR |= (1<: -#define LEDPING PINC6 -#define LEDPINB PINC7 -#define LEDPINM PINC5 - -Led::Led() { - init(); - 3d8: 0e 94 e8 01 call 0x3d0 ; 0x3d0 <_ZN3Led4initEv> - 3dc: 08 95 ret - -000003de <_ZN3Led5colorEh>: +000003fe <_ZN3Led5colorEh>: 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<: +00000412
: Led l; Rs232 r; -Can c; +Can c(Spi(0)); int main(void) { - 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 + 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); - 406: 66 e0 ldi r22, 0x06 ; 6 - 408: 88 e0 ldi r24, 0x08 ; 8 - 40a: 91 e0 ldi r25, 0x01 ; 1 - 40c: 0e 94 ef 01 call 0x3de ; 0x3de <_ZN3Led5colorEh> + 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> r.send("bla\n"); - 410: 60 e0 ldi r22, 0x00 ; 0 - 412: 71 e0 ldi r23, 0x01 ; 1 - 414: 87 e0 ldi r24, 0x07 ; 7 - 416: 91 e0 ldi r25, 0x01 ; 1 - 418: 0e 94 70 02 call 0x4e0 ; 0x4e0 <_ZN5Rs2324sendEPc> + 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> CANMessage m; m.id = 0x0123; - 41c: 83 e2 ldi r24, 0x23 ; 35 - 41e: 91 e0 ldi r25, 0x01 ; 1 - 420: 9a 83 std Y+2, r25 ; 0x02 - 422: 89 83 std Y+1, r24 ; 0x01 + 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 m.rtr = 0; - 424: 1b 82 std Y+3, r1 ; 0x03 + 444: 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 + m.data[0] = 0xAF; + 44a: 8f ea ldi r24, 0xAF ; 175 + 44c: 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> + #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; - 426: 82 e0 ldi r24, 0x02 ; 2 - 428: 8c 83 std Y+4, r24 ; 0x04 m.data[0] = 0xAF; - 42a: 8f ea ldi r24, 0xAF ; 175 - 42c: 8d 83 std Y+5, r24 ; 0x05 m.data[1] = 0xFE; - 42e: 8e ef ldi r24, 0xFE ; 254 - 430: 8e 83 std Y+6, r24 ; 0x06 while(1) { l.color(Led::GREEN); - 432: 62 e0 ldi r22, 0x02 ; 2 - 434: 88 e0 ldi r24, 0x08 ; 8 - 436: 91 e0 ldi r25, 0x01 ; 1 - 438: 0e 94 ef 01 call 0x3de ; 0x3de <_ZN3Led5colorEh> - 43c: 2f ef ldi r18, 0xFF ; 255 - 43e: 83 ed ldi r24, 0xD3 ; 211 - 440: 90 e3 ldi r25, 0x30 ; 48 - 442: 21 50 subi r18, 0x01 ; 1 - 444: 80 40 sbci r24, 0x00 ; 0 - 446: 90 40 sbci r25, 0x00 ; 0 - 448: e1 f7 brne .-8 ; 0x442 - 44a: 00 c0 rjmp .+0 ; 0x44c - 44c: 00 00 nop + 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 //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); - 44e: be 01 movw r22, r28 - 450: 6f 5f subi r22, 0xFF ; 255 - 452: 7f 4f sbci r23, 0xFF ; 255 - 454: 86 e0 ldi r24, 0x06 ; 6 - 456: 91 e0 ldi r25, 0x01 ; 1 - 458: 0e 94 53 01 call 0x2a6 ; 0x2a6 <_ZN3Can15can_get_messageEP10CANMessage> + 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> if(r == 0xFF) { - 45c: 8f 3f cpi r24, 0xFF ; 255 - 45e: 61 f4 brne .+24 ; 0x478 + 49a: 8f 3f cpi r24, 0xFF ; 255 + 49c: d9 f6 brne .-74 ; 0x454 l.color(Led::RED); - 460: 64 e0 ldi r22, 0x04 ; 4 - 462: 88 e0 ldi r24, 0x08 ; 8 - 464: 91 e0 ldi r25, 0x01 ; 1 - 466: 0e 94 ef 01 call 0x3de ; 0x3de <_ZN3Led5colorEh> - 46a: 8f e3 ldi r24, 0x3F ; 63 - 46c: 9c e9 ldi r25, 0x9C ; 156 - 46e: 01 97 sbiw r24, 0x01 ; 1 - 470: f1 f7 brne .-4 ; 0x46e - 472: 00 c0 rjmp .+0 ; 0x474 - 474: 00 00 nop - 476: dd cf rjmp .-70 ; 0x432 - _delay_ms(10); + 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 + +000004bc <_GLOBAL__sub_I_l>: } else { l.color(Led::BLUE); - 478: 61 e0 ldi r22, 0x01 ; 1 - 47a: 88 e0 ldi r24, 0x08 ; 8 - 47c: 91 e0 ldi r25, 0x01 ; 1 - 47e: 0e 94 ef 01 call 0x3de ; 0x3de <_ZN3Led5colorEh> - 482: 9f ef ldi r25, 0xFF ; 255 - 484: 23 ed ldi r18, 0xD3 ; 211 - 486: 80 e3 ldi r24, 0x30 ; 48 - 488: 91 50 subi r25, 0x01 ; 1 - 48a: 20 40 sbci r18, 0x00 ; 0 - 48c: 80 40 sbci r24, 0x00 ; 0 - 48e: e1 f7 brne .-8 ; 0x488 - 490: 00 c0 rjmp .+0 ; 0x492 - 492: 00 00 nop - 494: ce cf rjmp .-100 ; 0x432 - -00000496 <_GLOBAL__sub_I_l>: -#include "Led.h" + _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" #include Led l; - 496: 88 e0 ldi r24, 0x08 ; 8 - 498: 91 e0 ldi r25, 0x01 ; 1 - 49a: 0e 94 ec 01 call 0x3d8 ; 0x3d8 <_ZN3LedC1Ev> + 4c8: 8a e0 ldi r24, 0x0A ; 10 + 4ca: 91 e0 ldi r25, 0x01 ; 1 + 4cc: 0e 94 fb 01 call 0x3f6 ; 0x3f6 <_ZN3LedC1Ev> Rs232 r; - 49e: 87 e0 ldi r24, 0x07 ; 7 - 4a0: 91 e0 ldi r25, 0x01 ; 1 - 4a2: 0e 94 6d 02 call 0x4da ; 0x4da <_ZN5Rs232C1Ev> -Can c; - 4a6: 86 e0 ldi r24, 0x06 ; 6 - 4a8: 91 e0 ldi r25, 0x01 ; 1 - 4aa: 0e 94 07 01 call 0x20e ; 0x20e <_ZN3CanC1Ev> - 4ae: 08 95 ret + 4d0: 89 e0 ldi r24, 0x09 ; 9 + 4d2: 91 e0 ldi r25, 0x01 ; 1 + 4d4: 0e 94 7e 02 call 0x4fc ; 0x4fc <_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> + } else { + 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 -000004b0 <_ZN5Rs23212uart_putcharEh>: +000004fc <_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 + UCSR1B |= /*(1<: +} + +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> + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + 51e: 80 91 c8 00 lds r24, 0x00C8 + 522: 85 ff sbrs r24, 5 + 524: fc cf rjmp .-8 ; 0x51e <_ZN5Rs2324sendEPKc+0xa> UDR1 = c; - 4ba: 60 93 ce 00 sts 0x00CE, r22 - return 0; -} - 4be: 80 e0 ldi r24, 0x00 ; 0 - 4c0: 08 95 ret - -000004c2 <_ZN5Rs2324initEv>: - -void Rs232::init() -{ - UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - 4c2: 86 e0 ldi r24, 0x06 ; 6 - 4c4: 80 93 ca 00 sts 0x00CA, r24 + 526: 90 93 ce 00 sts 0x00CE, r25 UCSR1B |= /*(1<: +void Rs232::send(const char * text) { + while (*text) + 52a: 91 91 ld r25, Z+ + 52c: 91 11 cpse r25, r1 + 52e: f7 cf rjmp .-18 ; 0x51e <_ZN5Rs2324sendEPKc+0xa> + 530: 08 95 ret + +00000532 <_ZN3Spi9init_portEv>: +#define CANP_MOSI PINB2 +#define CANP_SCK PINB1 +#define CANP_CS PINB4 + +void Spi::init_port() { + CANDDR_SPI |= (1<: + +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 + init_port(); + 55a: 0e 94 99 02 call 0x532 ; 0x532 <_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<: + * Author: netz */ -#include "Rs232.h" +#include "Spi.h" -Rs232::Rs232() { +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 init(); - 4da: 0e 94 61 02 call 0x4c2 ; 0x4c2 <_ZN5Rs2324initEv> - 4de: 08 95 ret + 580: 0c 94 aa 02 jmp 0x554 ; 0x554 <_ZN3Spi4initEv> -000004e0 <_ZN5Rs2324sendEPc>: - UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - UCSR1B |= /*(1<: + SPCR = (1< - UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - UCSR1B |= /*(1<: } -void Rs232::send(char * text) { - 4f2: 21 96 adiw r28, 0x01 ; 1 - while (*text) - { - uart_putchar(*text); - 4f4: c8 01 movw r24, r16 - 4f6: 0e 94 58 02 call 0x4b0 ; 0x4b0 <_ZN5Rs23212uart_putcharEh> - UCSR1B |= /*(1<: + loop_until_bit_is_set(SPSR, SPIF); + + return SPDR; } -void Rs232::send(char * text) { - while (*text) - 4fa: 69 91 ld r22, Y+ - 4fc: 61 11 cpse r22, r1 - 4fe: fa cf rjmp .-12 ; 0x4f4 <_ZN5Rs2324sendEPc+0x14> - { - uart_putchar(*text); - text++; +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 +} + +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<: +void Spi::CSOn() { + CANPORT_SPI &= ~(1< + return send_soft(data); +} + +uint8_t Spi::send_hard( uint8_t data ) { + // Sendet ein Byte + SPDR = data; + 5da: 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> + + return SPDR; + 5e2: 8e b5 in r24, 0x2e ; 46 + 5e4: 08 95 ret + +uint8_t Spi::send(uint8_t data) { + if(mode == 0) { + return send_hard(data); } - 500: df 91 pop r29 - 502: cf 91 pop r28 - 504: 1f 91 pop r17 - 506: 0f 91 pop r16 - 508: 08 95 ret + return send_soft(data); + 5e6: 0c 94 c6 02 jmp 0x58c ; 0x58c <_ZN3Spi9send_softEh> -0000050a <__tablejump2__>: - 50a: ee 0f add r30, r30 - 50c: ff 1f adc r31, r31 +000005ea <__tablejump2__>: + 5ea: ee 0f add r30, r30 + 5ec: ff 1f adc r31, r31 -0000050e <__tablejump__>: - 50e: 05 90 lpm r0, Z+ - 510: f4 91 lpm r31, Z - 512: e0 2d mov r30, r0 - 514: 09 94 ijmp +000005ee <__tablejump__>: + 5ee: 05 90 lpm r0, Z+ + 5f0: f4 91 lpm r31, Z + 5f2: e0 2d mov r30, r0 + 5f4: 09 94 ijmp -00000516 <_exit>: - 516: f8 94 cli +000005f6 <_exit>: + 5f6: f8 94 cli -00000518 <__stop_program>: - 518: ff cf rjmp .-2 ; 0x518 <__stop_program> +000005f8 <__stop_program>: + 5f8: ff cf rjmp .-2 ; 0x5f8 <__stop_program> diff --git a/Mainboard/Mainboard/Debug/Mainboard.map b/Mainboard/Mainboard/Debug/Mainboard.map index 446bde3..79f3b29 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.map +++ b/Mainboard/Mainboard/Debug/Mainboard.map @@ -17,20 +17,32 @@ Discarded input sections .text 0x00000000 0x0 Can.o .bss 0x00000000 0x0 Can.o .text._ZN3Can21mcp2515_read_registerEh - 0x00000000 0x2c Can.o + 0x00000000 0x42 Can.o .text._ZN3Can16can_send_messageEP10CANMessage - 0x00000000 0x138 Can.o + 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 0xbc Led.o + 0x00000000 0x68 Led.o .text._ZN3Led7rainbowEh - 0x00000000 0x7c Led.o + 0x00000000 0x7a Led.o .text 0x00000000 0x0 Mainboard.o .text 0x00000000 0x0 Rs232.o .bss 0x00000000 0x0 Rs232.o + .text._ZN5Rs23212uart_putcharEh + 0x00000000 0x10 Rs232.o + .text._ZN5Rs2324initEv + 0x00000000 0x18 Rs232.o + .text 0x00000000 0x0 Spi.o + .bss 0x00000000 0x0 Spi.o + .text._ZN3Spi8init_spiEv + 0x00000000 0xa Spi.o + .text._ZN3Spi9send_hardEh + 0x00000000 0xc Spi.o .text 0x00000000 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) .bss 0x00000000 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) .text.libgcc.mul @@ -116,6 +128,7 @@ LOAD Can.o LOAD Led.o LOAD Mainboard.o LOAD Rs232.o +LOAD Spi.o START GROUP LOAD 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\libm.a END GROUP @@ -215,7 +228,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0x51a +.text 0x00000000 0x5fa *(.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 @@ -305,69 +318,74 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 0x000000c6 __vector_20 0x000000ca . = ALIGN (0x2) *(.text.*) - .text._ZN3Can8spi_putcEh - 0x000000ca 0x32 Can.o - 0x000000ca _ZN3Can8spi_putcEh - .text._ZN3Can8init_pinEv - 0x000000fc 0x12 Can.o - 0x000000fc _ZN3Can8init_pinEv - .text._ZN3Can8init_spiEv - 0x0000010e 0xa Can.o - 0x0000010e _ZN3Can8init_spiEv .text._ZN3Can22mcp2515_write_registerEhh - 0x00000118 0x32 Can.o - 0x00000118 _ZN3Can22mcp2515_write_registerEhh + 0x000000ca 0x50 Can.o + 0x000000ca _ZN3Can22mcp2515_write_registerEhh .text._ZN3Can8init_canEv - 0x0000014a 0xc4 Can.o - 0x0000014a _ZN3Can8init_canEv - .text._ZN3CanC2Ev - 0x0000020e 0x2a Can.o - 0x0000020e _ZN3CanC2Ev - 0x0000020e _ZN3CanC1Ev + 0x0000011a 0xee Can.o + 0x0000011a _ZN3Can8init_canEv + .text._ZN3CanC2E3Spi + 0x00000208 0xc Can.o + 0x00000208 _ZN3CanC2E3Spi + 0x00000208 _ZN3CanC1E3Spi .text._ZN3Can18mcp2515_bit_modifyEhhh - 0x00000238 0x40 Can.o - 0x00000238 _ZN3Can18mcp2515_bit_modifyEhhh + 0x00000214 0x60 Can.o + 0x00000214 _ZN3Can18mcp2515_bit_modifyEhhh .text._ZN3Can22mcp2515_read_rx_statusEv - 0x00000278 0x2e Can.o - 0x00000278 _ZN3Can22mcp2515_read_rx_statusEv + 0x00000274 0x40 Can.o + 0x00000274 _ZN3Can22mcp2515_read_rx_statusEv .text._ZN3Can15can_get_messageEP10CANMessage - 0x000002a6 0x12a Can.o - 0x000002a6 _ZN3Can15can_get_messageEP10CANMessage - .text._ZN3Led4initEv - 0x000003d0 0x8 Led.o - 0x000003d0 _ZN3Led4initEv + 0x000002b4 0x142 Can.o + 0x000002b4 _ZN3Can15can_get_messageEP10CANMessage .text._ZN3LedC2Ev - 0x000003d8 0x6 Led.o - 0x000003d8 _ZN3LedC1Ev - 0x000003d8 _ZN3LedC2Ev + 0x000003f6 0x8 Led.o + 0x000003f6 _ZN3LedC1Ev + 0x000003f6 _ZN3LedC2Ev .text._ZN3Led5colorEh - 0x000003de 0x14 Led.o - 0x000003de _ZN3Led5colorEh - .text.main 0x000003f2 0xa4 Mainboard.o - 0x000003f2 main - .text._GLOBAL__sub_I_l - 0x00000496 0x1a Mainboard.o - .text._ZN5Rs23212uart_putcharEh - 0x000004b0 0x12 Rs232.o - 0x000004b0 _ZN5Rs23212uart_putcharEh - .text._ZN5Rs2324initEv - 0x000004c2 0x18 Rs232.o - 0x000004c2 _ZN5Rs2324initEv + 0x000003fe 0x14 Led.o + 0x000003fe _ZN3Led5colorEh + .text.startup.main + 0x00000412 0xaa Mainboard.o + 0x00000412 main + .text.startup._GLOBAL__sub_I_l + 0x000004bc 0x40 Mainboard.o .text._ZN5Rs232C2Ev - 0x000004da 0x6 Rs232.o - 0x000004da _ZN5Rs232C2Ev - 0x000004da _ZN5Rs232C1Ev - .text._ZN5Rs2324sendEPc - 0x000004e0 0x2a Rs232.o - 0x000004e0 _ZN5Rs2324sendEPc - .text.libgcc 0x0000050a 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) - 0x0000050a __tablejump2__ - 0x0000050e __tablejump__ - 0x00000516 . = ALIGN (0x2) + 0x000004fc 0x18 Rs232.o + 0x000004fc _ZN5Rs232C2Ev + 0x000004fc _ZN5Rs232C1Ev + .text._ZN5Rs2324sendEPKc + 0x00000514 0x1e Rs232.o + 0x00000514 _ZN5Rs2324sendEPKc + .text._ZN3Spi9init_portEv + 0x00000532 0x22 Spi.o + 0x00000532 _ZN3Spi9init_portEv + .text._ZN3Spi4initEv + 0x00000554 0x1e Spi.o + 0x00000554 _ZN3Spi4initEv + .text._ZN3SpiC2Eh + 0x00000572 0x12 Spi.o + 0x00000572 _ZN3SpiC1Eh + 0x00000572 _ZN3SpiC2Eh + .text._ZN3Spi5CSOffEv + 0x00000584 0x4 Spi.o + 0x00000584 _ZN3Spi5CSOffEv + .text._ZN3Spi4CSOnEv + 0x00000588 0x4 Spi.o + 0x00000588 _ZN3Spi4CSOnEv + .text._ZN3Spi9send_softEh + 0x0000058c 0x46 Spi.o + 0x0000058c _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) *(.fini9) - .fini9 0x00000516 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) - 0x00000516 _exit - 0x00000516 exit + .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) *(.fini8) *(.fini8) @@ -386,11 +404,11 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000516 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 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) - 0x0000051a _etext = . + 0x000005fa _etext = . -.data 0x00800100 0x6 load address 0x0000051a +.data 0x00800100 0x6 load address 0x000005fa 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 @@ -398,6 +416,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .data 0x00800100 0x0 Led.o .data 0x00800100 0x0 Mainboard.o .data 0x00800100 0x0 Rs232.o + .data 0x00800100 0x0 Spi.o .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/avr35\libgcc.a(_exit.o) .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/avr35\libgcc.a(_copy_data.o) .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/avr35\libgcc.a(_clear_bss.o) @@ -414,25 +433,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 0x3 +.bss 0x00800106 0x5 0x00800106 PROVIDE (__bss_start, .) *(.bss) - .bss 0x00800106 0x3 Mainboard.o + .bss 0x00800106 0x5 Mainboard.o 0x00800106 c - 0x00800107 r - 0x00800108 l + 0x00800109 r + 0x0080010a l *(.bss*) *(COMMON) - 0x00800109 PROVIDE (__bss_end, .) - 0x0000051a __data_load_start = LOADADDR (.data) - 0x00000520 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x0080010b PROVIDE (__bss_end, .) + 0x000005fa __data_load_start = LOADADDR (.data) + 0x00000600 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800109 0x0 - 0x00800109 PROVIDE (__noinit_start, .) +.noinit 0x0080010b 0x0 + 0x0080010b PROVIDE (__noinit_start, .) *(.noinit*) - 0x00800109 PROVIDE (__noinit_end, .) - 0x00800109 _end = . - 0x00800109 PROVIDE (__heap_start, .) + 0x0080010b PROVIDE (__noinit_end, .) + 0x0080010b _end = . + 0x0080010b PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -480,6 +499,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .comment 0x00000000 0x30 Led.o .comment 0x00000000 0x30 Mainboard.o .comment 0x00000000 0x30 Rs232.o + .comment 0x00000000 0x30 Spi.o .debug *(.debug) @@ -493,66 +513,75 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x118 +.debug_aranges 0x00000000 0x160 *(.debug_aranges) .debug_aranges - 0x00000000 0x70 Can.o + 0x00000000 0x58 Can.o .debug_aranges - 0x00000070 0x48 Led.o + 0x00000058 0x48 Led.o .debug_aranges - 0x000000b8 0x28 Mainboard.o + 0x000000a0 0x28 Mainboard.o .debug_aranges - 0x000000e0 0x38 Rs232.o + 0x000000c8 0x38 Rs232.o + .debug_aranges + 0x00000100 0x60 Spi.o .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x1e0f +.debug_info 0x00000000 0x233b *(.debug_info) - .debug_info 0x00000000 0xf5f Can.o - .debug_info 0x00000f5f 0x4f8 Led.o - .debug_info 0x00001457 0x781 Mainboard.o - .debug_info 0x00001bd8 0x237 Rs232.o + .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 *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0x99e +.debug_abbrev 0x00000000 0xc52 *(.debug_abbrev) - .debug_abbrev 0x00000000 0x34a Can.o - .debug_abbrev 0x0000034a 0x1eb Led.o - .debug_abbrev 0x00000535 0x2fc Mainboard.o - .debug_abbrev 0x00000831 0x16d Rs232.o + .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_line 0x00000000 0x72a +.debug_line 0x00000000 0x8ce *(.debug_line) - .debug_line 0x00000000 0x2e1 Can.o - .debug_line 0x000002e1 0x162 Led.o - .debug_line 0x00000443 0x1ca Mainboard.o - .debug_line 0x0000060d 0x11d Rs232.o + .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_frame 0x00000000 0x338 +.debug_frame 0x00000000 0x35c *(.debug_frame) - .debug_frame 0x00000000 0x1ac Can.o - .debug_frame 0x000001ac 0xe0 Led.o - .debug_frame 0x0000028c 0x44 Mainboard.o - .debug_frame 0x000002d0 0x68 Rs232.o + .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_str 0x00000000 0x490 +.debug_str 0x00000000 0x54c *(.debug_str) - .debug_str 0x00000000 0x389 Can.o - 0x3e1 (size before relaxing) - .debug_str 0x00000389 0x23 Led.o + .debug_str 0x00000000 0x38c Can.o + 0x3e4 (size before relaxing) + .debug_str 0x0000038c 0xbb Led.o 0x185 (size before relaxing) - .debug_str 0x000003ac 0xc2 Mainboard.o - 0x465 (size before relaxing) - .debug_str 0x0000046e 0x22 Rs232.o - 0x14a (size before relaxing) + .debug_str 0x00000447 0xbe Mainboard.o + 0x4f9 (size before relaxing) + .debug_str 0x00000505 0x22 Rs232.o + 0x14b (size before relaxing) + .debug_str 0x00000527 0x25 Spi.o + 0x1c8 (size before relaxing) -.debug_loc 0x00000000 0xd47 +.debug_loc 0x00000000 0xdbb *(.debug_loc) - .debug_loc 0x00000000 0x796 Can.o - .debug_loc 0x00000796 0x3eb Led.o - .debug_loc 0x00000b81 0xad Mainboard.o - .debug_loc 0x00000c2e 0x119 Rs232.o + .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_macinfo *(.debug_macinfo) @@ -560,12 +589,13 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x120 +.debug_ranges 0x00000000 0x188 *(.debug_ranges) - .debug_ranges 0x00000000 0x60 Can.o - .debug_ranges 0x00000060 0x80 Led.o - .debug_ranges 0x000000e0 0x18 Mainboard.o - .debug_ranges 0x000000f8 0x28 Rs232.o + .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_macro *(.debug_macro) diff --git a/Mainboard/Mainboard/Debug/Mainboard.srec b/Mainboard/Mainboard/Debug/Mainboard.srec index 00734d1..5e4e4c0 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.srec +++ b/Mainboard/Mainboard/Debug/Mainboard.srec @@ -6,80 +6,94 @@ S11300300C9463000C9463000C9463000C946300B0 S11300400C9463000C9463000C9463000C946300A0 S11300500C9463000C9463000C9463000C94630090 S11300600C9463000C9463000C9463000C94630080 -S11300700C9463004B0211241FBECFEFD4E0DEBF0B -S1130080CDBF11E0A0E0B1E0EAE1F5E002C00590E7 +S11300700C9463005E0211241FBECFEFD4E0DEBFF8 +S1130080CDBF11E0A0E0B1E0EAEFF5E002C00590D9 S11300900D92A630B107D9F721E0A6E0B1E001C086 -S11300A01D92A930B207E1F710E0C6E7D0E004C022 -S11300B02297FE010E948702C437D107C9F70E9424 -S11300C0F9010C948B020C940000CF93DF9300D0C1 -S11300D0CDB7DEB76EBD65E0CE0102960E94EF019A -S11300E00DB407FEFDCF60E0CE0101960E94EF0142 -S11300F08EB50F900F90DF91CF91089584B18660F3 -S113010084B985B1817F85B9249A2C9A089580E5B4 -S11301108CBD81E08DBD08950F931F93CF93DF9322 -S1130120EC01062F142F2C9862E00E946500602FCA -S1130130CE010E946500612FCE010E9465002C9AB9 -S1130140DF91CF911F910F910895CF93DF93EC012D -S11301502C9860EC0E9465008FE99FE00197F1F70D -S113016000C000002C9A8FE39CE90197F1F700C0CE -S1130170000047E06AE2CE010E948C0040E969E297 -S1130180CE010E948C0042E068E2CE010E948C0005 -S113019043E06BE2CE010E948C0040E660E6CE01B3 -S11301A00E948C0040E660E7CE010E948C0040E093 -S11301B060E2CE010E948C0040E061E2CE010E9428 -S11301C08C0040E062E2CE010E948C0040E063E2D9 -S11301D0CE010E948C0040E064E2CE010E948C00BB -S11301E040E065E2CE010E948C0040E066E2CE0170 -S11301F00E948C0040E067E2CE010E948C0040E047 -S11302006CE0CE010E948C00DF91CF910895CF93D2 -S1130210DF93EC018FE39CE90197F1F700C0000044 -S1130220CE010E947E00CE010E948700CE010E9472 -S1130230A500DF91CF910895FF920F931F93CF9361 -S1130240DF93EC01F62E042F122F2C9865E00E9408 -S113025065006F2DCE010E946500602FCE010E94C3 -S11302606500612FCE010E9465002C9ADF91CF9129 -S11302701F910F91FF9008951F93CF93DF93EC018B -S11302802C9860EB0E9465006FEFCE010E94650020 -S1130290182F6FEFCE010E9465002C9A812FDF91F9 -S11302A0CF911F910895AF92BF92CF92DF92EF92B8 -S11302B0FF920F931F93CF93DF931F92CDB7DEB7B7 -S11302C07C016B010E943C018983898186FF06C001 -S11302D02C9860E9C7010E94650009C089818823C0 -S11302E00CF069C02C9864E9C7010E9465006FEFA7 -S11302F0C7010E94650090E0880F991F880F991F1D -S1130300880F991FF601918380836FEFC7010E94C4 -S1130310650090E096958795929582958F708927D0 -S11303209F708927F60120813181822B932B918341 -S113033080836FEFC7010E9465006FEFC7010E94C1 -S113034065006FEFC7010E9465008F70F60183831B -S11303508823A1F086010C5F1F4F5601F5E0AF0E14 -S1130360B11C8150A80EB11C6FEFC7010E9465003B -S1130370F80181938F01EA15FB05B1F72C9A898165 -S113038083FF04C081E0F601828302C0F601128279 -S1130390898186FF07C020E041E06CE2C7010E942A -S11303A01C0106C020E042E06CE2C7010E941C016F -S11303B08981877001C08FEF0F90DF91CF911F91DA -S11303C00F91FF90EF90DF90CF90BF90AF90089582 -S11303D084B1806E84B908950E94E801089585B1BE -S11303E08F7185B985B16295660F607E682B65B99A -S11303F00895CF93DF93CDB7DEB72C970FB6F8945B -S1130400DEBF0FBECDBF66E088E091E00E94EF0141 -S113041060E071E087E091E00E94700283E291E085 -S11304209A8389831B8282E08C838FEA8D838EEF8B -S11304308E8362E088E091E00E94EF012FEF83ED6C -S113044090E3215080409040E1F700C00000BE01DD -S11304506F5F7F4F86E091E00E9453018F3F61F40C -S113046064E088E091E00E94EF018FE39CE901974A -S1130470F1F700C00000DDCF61E088E091E00E9468 -S1130480EF019FEF23ED80E3915020408040E1F79E -S113049000C00000CECF88E091E00E94EC0187E02C -S11304A091E00E946D0286E091E00E9407010895A8 -S11304B0E8ECF0E0808185FFFDCF6093CE0080E022 -S11304C0089586E08093CA00E9ECF0E080818860BA -S11304D0808387E68093CC0008950E94610208958A -S11304E00F931F93CF93DF938C01EB0168816623F5 -S11304F039F02196C8010E94580269916111FACF1E -S1130500DF91CF911F910F910895EE0FFF1F05907A -S10D0510F491E02D0994F894FFCF54 -S109051A626C610A00009E +S11300A01D92AB30B207E1F710E0C6E7D0E004C020 +S11300B02297FE010E94F702C437D107C9F70E94B4 +S11300C009020C94FB020C940000FF920F931F93FF +S11300D0CF93DF931F92CDB7DEB7F82E092F162FDB +S11300E049830E94C40262E08F2D902F0E94E9028E +S11300F0612F8F2D902F0E94E9024981642F8F2D4B +S1130100902F0E94E9028F2D902F0F90DF91CF91B5 +S11301101F910F91FF900C94C202CF93DF93D82FBD +S1130120C92F0E94C40260EC8D2F9C2F0E94E9020B +S11301308FE99FE00197F1F700C000008D2F9C2FFD +S11301400E94C2028FE39CE90197F1F700C000000E +S113015047E06AE28D2F9C2F0E94650040E969E226 +S11301608D2F9C2F0E94650042E068E28D2F9C2F0A +S11301700E94650043E06BE28D2F9C2F0E94650076 +S113018040E660E68D2F9C2F0E94650040E660E704 +S11301908D2F9C2F0E94650040E060E28D2F9C2FE4 +S11301A00E94650040E061E28D2F9C2F0E94650053 +S11301B040E062E28D2F9C2F0E94650040E063E2E4 +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 S9030000FC diff --git a/Mainboard/Mainboard/Debug/Makefile b/Mainboard/Mainboard/Debug/Makefile index be2a735..9ec3217 100644 --- a/Mainboard/Mainboard/Debug/Makefile +++ b/Mainboard/Mainboard/Debug/Makefile @@ -39,7 +39,8 @@ C_SRCS += \ ../Can.cpp \ ../Led.cpp \ ../Mainboard.cpp \ -../Rs232.cpp +../Rs232.cpp \ +../Spi.cpp PREPROCESSING_SRCS += @@ -52,28 +53,32 @@ OBJS += \ Can.o \ Led.o \ Mainboard.o \ -Rs232.o +Rs232.o \ +Spi.o OBJS_AS_ARGS += \ Can.o \ Led.o \ Mainboard.o \ -Rs232.o +Rs232.o \ +Spi.o C_DEPS += \ Can.d \ Led.d \ Mainboard.d \ -Rs232.d +Rs232.d \ +Spi.d C_DEPS_AS_ARGS += \ Can.d \ Led.d \ Mainboard.d \ -Rs232.d +Rs232.d \ +Spi.d OUTPUT_FILE_PATH +=Mainboard.elf @@ -96,10 +101,12 @@ LIB_DEP+= + + ./%.o: .././%.cpp @echo Building file: $< @echo Invoking: AVR8/GNU C++ Compiler : - $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega32u2 -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o"$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O2 -ffunction-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega32u2 -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o"$@" "$<" @echo Finished building: $< diff --git a/Mainboard/Mainboard/Debug/Spi.d b/Mainboard/Mainboard/Debug/Spi.d new file mode 100644 index 0000000..7634a61 --- /dev/null +++ b/Mainboard/Mainboard/Debug/Spi.d @@ -0,0 +1,36 @@ +Spi.d Spi.o: .././Spi.cpp .././Spi.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/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 \ + 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/stdint.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/stdint.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/iom32u2.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/portpins.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/common.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 + +.././Spi.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/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: + +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/stdint.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/stdint.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/iom32u2.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/portpins.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/common.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: diff --git a/Mainboard/Mainboard/Debug/makedep.mk b/Mainboard/Mainboard/Debug/makedep.mk index dadaf01..db4df43 100644 --- a/Mainboard/Mainboard/Debug/makedep.mk +++ b/Mainboard/Mainboard/Debug/makedep.mk @@ -10,3 +10,5 @@ Mainboard.cpp Rs232.cpp +Spi.cpp + diff --git a/Mainboard/Mainboard/Mainboard.cpp b/Mainboard/Mainboard/Mainboard.cpp index 7e387cc..86d12f8 100644 --- a/Mainboard/Mainboard/Mainboard.cpp +++ b/Mainboard/Mainboard/Mainboard.cpp @@ -9,11 +9,12 @@ #include "Led.h" #include "Rs232.h" #include "Can.h" +#include "Spi.h" #include Led l; Rs232 r; -Can c; +Can c(Spi(0)); int main(void) { @@ -28,21 +29,21 @@ int main(void) while(1) { l.color(Led::GREEN); - _delay_ms(1000); + _delay_ms(100); //r.send("Text\n"); //_delay_ms(500); //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); if(r == 0xFF) { l.color(Led::RED); - _delay_ms(10); + _delay_ms(100); } else { l.color(Led::BLUE); _delay_ms(1000); - } + } } } \ No newline at end of file diff --git a/Mainboard/Mainboard/Mainboard.cppproj b/Mainboard/Mainboard/Mainboard.cppproj index dbcf42d..70af7c5 100644 --- a/Mainboard/Mainboard/Mainboard.cppproj +++ b/Mainboard/Mainboard/Mainboard.cppproj @@ -128,7 +128,7 @@ DEBUG - Optimize (-O1) + Optimize more (-O2) True True Default (-g2) @@ -171,6 +171,12 @@ compile + + compile + + + compile + \ No newline at end of file diff --git a/Mainboard/Mainboard/Rs232.cpp b/Mainboard/Mainboard/Rs232.cpp index d3c56b3..5f2bb33 100644 --- a/Mainboard/Mainboard/Rs232.cpp +++ b/Mainboard/Mainboard/Rs232.cpp @@ -25,7 +25,7 @@ void Rs232::init() UBRR1L = (F_CPU / (BAUD_RATE * 16L) - 1); //Teiler wird gesetzt } -void Rs232::send(char * text) { +void Rs232::send(const char * text) { while (*text) { uart_putchar(*text); diff --git a/Mainboard/Mainboard/Rs232.h b/Mainboard/Mainboard/Rs232.h index 449db32..7ca51fa 100644 --- a/Mainboard/Mainboard/Rs232.h +++ b/Mainboard/Mainboard/Rs232.h @@ -20,7 +20,7 @@ class Rs232 { public: Rs232(); Rs232(int) {} - void send(char *text); + void send(const char *text); }; diff --git a/Mainboard/Mainboard/Spi.cpp b/Mainboard/Mainboard/Spi.cpp new file mode 100644 index 0000000..a0b521f --- /dev/null +++ b/Mainboard/Mainboard/Spi.cpp @@ -0,0 +1,104 @@ +/* + * Spi.cpp + * + * Created: 06.11.2013 15:49:57 + * Author: netz + */ + +#include "Spi.h" + +Spi::Spi(uint8_t index) : mode(1) { //, canport(&PORTB) /* : m_index (index) {} */ { + init(); +} + +void Spi::init() { + init_port(); + if(mode == 0) { + init_spi(); + } +} + +#define CANDDR_SPI DDRB +#define CANPORT_SPI PORTB +#define CANPIN_SPI PINB +#define CANP_MISO PINB3 +#define CANP_MOSI PINB2 +#define CANP_SCK PINB1 +#define CANP_CS PINB4 + +void Spi::init_port() { + CANDDR_SPI |= (1<>= 1; + 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); + } + //RF_PORT &= ~(1< + +class Spi { + public: + Spi(uint8_t index); + void CSOn(); + void CSOff(); + uint8_t send(uint8_t data); + private: + const uint8_t mode; //0 Hardware, 1 Software + volatile uint8_t *canport; + //static uint8_t spiport = PORTB; + 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;*/ +}; + + + +#endif /* SPI_H_ */ \ No newline at end of file