diff --git a/button_debounce/.dep/main.o.d b/button_debounce/.dep/main.o.d new file mode 100644 index 0000000..bb552d1 --- /dev/null +++ b/button_debounce/.dep/main.o.d @@ -0,0 +1,62 @@ +main.o: main.c \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdlib.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stddef.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/io.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/sfr_defs.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/inttypes.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdint.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/iom328p.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/portpins.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/common.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/version.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/fuse.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/lock.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdio.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdarg.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/util/delay.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/util/delay_basic.h \ + main.h uart.h timer.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/interrupt.h + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdlib.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stddef.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/io.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/sfr_defs.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/inttypes.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdint.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/iom328p.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/portpins.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/common.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/version.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/fuse.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/lock.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdio.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdarg.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/util/delay.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/util/delay_basic.h: + +main.h: + +uart.h: + +timer.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/interrupt.h: diff --git a/button_debounce/.dep/timer.o.d b/button_debounce/.dep/timer.o.d new file mode 100644 index 0000000..8989868 --- /dev/null +++ b/button_debounce/.dep/timer.o.d @@ -0,0 +1,39 @@ +timer.o: timer.c timer.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/io.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/sfr_defs.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/inttypes.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdint.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/iom328p.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/portpins.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/common.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/version.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/fuse.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/lock.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/interrupt.h + +timer.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/io.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/sfr_defs.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/inttypes.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdint.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/iom328p.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/portpins.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/common.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/version.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/fuse.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/lock.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/interrupt.h: diff --git a/button_debounce/.dep/uart_async.o.d b/button_debounce/.dep/uart_async.o.d new file mode 100644 index 0000000..80ddbd7 --- /dev/null +++ b/button_debounce/.dep/uart_async.o.d @@ -0,0 +1,49 @@ +uart_async.o: uart_async.c \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/io.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/sfr_defs.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/inttypes.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdint.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/iom328p.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/portpins.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/common.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/version.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/fuse.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/lock.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/interrupt.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdio.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdarg.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stddef.h \ + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/util/setbaud.h + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/io.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/sfr_defs.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/inttypes.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdint.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/iom328p.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/portpins.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/common.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/version.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/fuse.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/lock.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/avr/interrupt.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdio.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stdarg.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/include/stddef.h: + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/util/setbaud.h: diff --git a/button_debounce/main.eep b/button_debounce/main.eep new file mode 100644 index 0000000..1996e8f --- /dev/null +++ b/button_debounce/main.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/button_debounce/main.elf b/button_debounce/main.elf new file mode 100755 index 0000000..606449d Binary files /dev/null and b/button_debounce/main.elf differ diff --git a/button_debounce/main.hex b/button_debounce/main.hex new file mode 100644 index 0000000..67bda7f --- /dev/null +++ b/button_debounce/main.hex @@ -0,0 +1,238 @@ +:100000000C9434000C9451000C9451000C94510049 +:100010000C9451000C9451000C9451000C9451001C +:100020000C9451000C9451000C9451000C9451000C +:100030000C9451000C9451000C947B020C945100D0 +:100040000C9451000C9451000C94D7000C9417019F +:100050000C9451000C9451000C9451000C945100DC +:100060000C9451000C94510011241FBECFEFD8E026 +:10007000DEBFCDBF11E0A0E0B1E0EAE7FEE002C0E4 +:1000800005900D92A035B107D9F713E0A0E5B1E0D6 +:1000900001C01D92A63AB107E1F70E945B030C94E0 +:1000A0003B070C940000CF93DF9300D0CDB7DEB7B1 +:1000B0009A838983898190E002C0959587956A9596 +:1000C000E2F781700F900F90DF91CF910895FC01BE +:1000D000208181E090E002C0880F991F6A95E2F7C5 +:1000E000442321F48095822380830895282B208344 +:1000F00008951092510310925003109253031092DE +:100100005203109295031092940310929703109249 +:1001100096031092C50087E68093C40086E0809322 +:10012000C20088E18093C100789408951F93182F2E +:100130008A3019F48DE00E9496002091520330918C +:100140005303C901019660E071E00E9448044091A8 +:100150005003509151038417950781F0F901EE0F78 +:10016000FF1FE05BFE4F1083118290935303809337 +:1001700052038091C10080628093C10080E090E0D2 +:100180001F9108958091940390919503019660E2E8 +:1001900070E00E9448049093950380939403FC01BF +:1001A000EE0FFF1FEC5AFC4F8081918108951F9242 +:1001B0000F920FB60F9211242F933F934F935F939B +:1001C0006F937F938F939F93AF93BF93EF93FF931F +:1001D0002091960330919703C901019660E270E087 +:1001E0000E94480440919403509195038417950709 +:1001F00069F04091C600F901EE0FFF1FEC5AFC4F69 +:10020000408311829093970380939603FF91EF911F +:10021000BF91AF919F918F917F916F915F914F911E +:100220003F912F910F900FBE0F901F9018951F9226 +:100230000F920FB60F9211242F933F935F936F93FA +:100240007F938F939F93AF93BF93EF93FF9380918F +:10025000500390915103019660E071E00E944804C0 +:1002600020915203309153038217930769F0FC01E8 +:10027000EE0FFF1FE05BFE4F20812093C60090939E +:1002800051038093500305C08091C1008F7D8093FE +:10029000C100FF91EF91BF91AF919F918F917F919D +:1002A0006F915F913F912F910F900FBE0F901F9014 +:1002B000189514BC85B5846085BD8EE387BD82E04A +:1002C00080936E00109298031092990310929A03F3 +:1002D00010929B0310929C0310929D0310929E0318 +:1002E00010929F0378948FEF84B90895209198031A +:1002F0003091990340919A0350919B0360919C0324 +:1003000070919D0380919E0390919F0308952F9279 +:100310003F924F925F926F927F928F929F92AF9295 +:10032000BF92CF92DF92EF92FF920F931F93CF93E2 +:10033000DF930F92CDB7DEB780909803709099034A +:1003400060909A0350909B0340909C0330909D03D3 +:1003500020909E0380919F038983282D372D462D61 +:10036000552D642D732D822D998102E00E94E102AA +:10037000F22E132FE42ED52EC62EB72EA82E992E90 +:1003800005E00E94E102B22FBF19F1E02B1708F03F +:10039000F0E0232F211BE1E0321708F0E0E0022F0C +:1003A0000F1B31E0201708F030E0E32B342F3E190B +:1003B00021E0431708F020E0F32EFE1A41E03F153C +:1003C00008F040E0242B452F4D1931E0541708F078 +:1003D00030E0142F121B21E0411708F020E0322BEF +:1003E000462F4C1921E0641708F020E0A42FA31B2E +:1003F00031E04A1708F030E0232B472F4B1931E04A +:10040000741708F030E0E42FE21B21E04E1708F0EB +:1004100020E0322B482F4A1921E0841708F020E011 +:10042000F42FF31B81E04F1708F080E0282B991977 +:10043000921B2B2F280D31E02B1708F030E0700EA7 +:1004400041E0701608F040E0370D81E0371508F004 +:1004500080E0482B6F0C51E06F1408F050E0460D1F +:1004600081E0461508F080E0582B510E61E05116EE +:1004700008F060E0550D81E0551508F080E0682B2C +:100480004A0E71E04A1608F070E0640D81E06415D0 +:1004900008F080E0782B3E0E81E03E1608F080E008 +:1004A000730DE1E0731508F0E0E08E2B2F0EE1E014 +:1004B0002F1608F0E0E0820DF1E0821508F0F0E080 +:1004C000EF2BA9819A0F9E0F03E00E94E1020F908B +:1004D000DF91CF911F910F91FF90EF90DF90CF9020 +:1004E000BF90AF909F908F907F906F905F904F9054 +:1004F0003F902F9008951F920F920FB60F921124E4 +:100500002F933F934F935F936F937F938F939F931B +:10051000AF93EF93FF9316BC4091980330919903EA +:1005200020919A0390919B0380919C03F0919D03ED +:10053000E0919E03A0919F03642F6F5F51E06417C9 +:1005400008F050E0530F41E0531708F040E0420F2D +:1005500031E0421708F030E0390F21E0391708F098 +:1005600020E0280F91E0281708F090E09F0F81E02D +:100570009F1708F080E08E0F71E08E1708F070E092 +:100580007A0F609398035093990340939A033093A2 +:100590009B0320939C0390939D0380939E037093F1 +:1005A0009F03FF91EF91AF919F918F917F916F91F9 +:1005B0005F914F913F912F910F900FBE0F901F9021 +:1005C0001895CF92DF92EF92FF920F93CF93DF9324 +:1005D000CDB7DEB760970FB6F894DEBF0FBECDBFC4 +:1005E000002309F45AC029873A874B875C876D87B7 +:1005F0007E878F87988B80E2801B49855A856B8523 +:100600007C851816B4F019821A821B821C829927E5 +:1006100087FD9095909581959F4F04C0440F551F7D +:10062000661F771F8A95D2F74D835E836F83788725 +:100630002CC06A017B01002E04C0CC0CDD1CEE1C1A +:10064000FF1C0A94D2F7C982DA82EB82FC826A012B +:100650007B0104C0F694E794D794C7948A95D2F7A7 +:10066000D701C6014D855E856F85788904C0440F2A +:10067000551F661F771F0A95D2F7842B952BA62B43 +:10068000B72B8D839E83AF83B88729813A814B81B5 +:100690005C816D817E818F81988560960FB6F8941C +:1006A000DEBF0FBECDBFDF91CF910F91FF90EF90D6 +:1006B000DF90CF900895CF93DF9300D0CDB7DEB712 +:1006C00052985A9A259A0E9459010E94790082E410 +:1006D00091E09093A3038093A20384E391E090932D +:1006E000A1038093A003772400E020E040E0442EA3 +:1006F00041E0542E5BE1252E51E0352E01C0212F23 +:1007000089B189831A82898190E09595879595951D +:100710008795182F1170121759F10E94760149011F +:100720005A016B017C018DB79EB70C970FB6F894F8 +:100730009EBF0FBE8DBFEDB7FEB73196ADB7BEB74A +:1007400012965C924E921197128313828482958244 +:10075000A682B782C086D186E286F3860E946F04A5 +:100760008DB79EB70C960FB6F8949EBF0FBE8DBF87 +:100770000E947601E22FE819F1E02E1708F0F0E070 +:10078000A32FA91921E03A1708F020E03A2F3F1BC8 +:10079000F1E0A31708F0F0E02F2BA42FAA19F1E045 +:1007A0004A1708F0F0E04A2F421B21E0A41708F096 +:1007B00020E0F22BA52FAB1921E05A1708F020E01A +:1007C0005A2F5F1BF1E0A51708F0F0E02F2BA62FA2 +:1007D000AC19F1E06A1708F0F0E06A2F621B21E023 +:1007E000A61708F020E0F22B272F2D19A1E0721791 +:1007F00008F0A0E0722F7F1BF1E0271708F0F0E06F +:10080000AF2BF82FFE1921E08F1708F020E08F2F73 +:100810008A1BA1E0F81708F0A0E02A2B9F19921775 +:1008200071F4882361F4772351F4662341F455234E +:1008300031F4442321F4332311F4EB3008F0012F79 +:10084000071509F45CCFADB7BEB71C970FB6F89487 +:10085000BEBF0FBEADBFEDB7FEB7319612963C924C +:100860002E9211970283138284829582A682B78288 +:10087000C086D186E286F3860E946F048DB79EB74C +:100880000C960FB6F8949EBF0FBE8DBF702E37CF5B +:1008900097FB092E07260AD077FD04D00CD006D08E +:1008A00000201AF4709561957F4F0895F6F79095A2 +:1008B00081959F4F0895AA1BBB1B51E107C0AA1F3A +:1008C000BB1FA617B70710F0A61BB70B881F991FF1 +:1008D0005A95A9F780959095BC01CD010895A0E0A7 +:1008E000B0E0E5E7F4E00C941407FE013596619161 +:1008F00071918091A2039091A303AF010E9484049F +:100900002096E2E00C943007ADE0B0E0EAE8F4E0D5 +:100910000C9404073C017D876C875A01FC01178207 +:100920001682838181FFCAC13FE3C32E2E01089442 +:10093000411C511CF3019381EC85FD8593FD85914C +:1009400093FF8191FD87EC87882309F4B3C1853239 +:1009500041F493FD859193FF8191FD87EC8785326A +:1009600029F490E0B3010E947A06E4CFEE24DD245E +:1009700010E01032B0F48B3269F08C3228F48032FF +:1009800051F0833271F40BC08D3239F0803349F469 +:1009900011602CC01260146029C0186027C010615B +:1009A00025C017FD2EC0282F20532A3098F416FF9B +:1009B00008C08E2D880FE82EEE0CEE0CE80EE20E2D +:1009C00015C08D2D880FD82EDD0CDD0CD80ED20E63 +:1009D00010620CC08E3221F416FD6CC1106406C08A +:1009E0008C3611F4106802C0883659F4EC85FD8508 +:1009F00093FD859193FF8191FD87EC87882309F012 +:100A0000B8CF982F9554933018F09052933030F41B +:100A100024E030E0A20EB31EC9820FC0833631F04D +:100A2000833781F0833509F05AC022C0F5018081F7 +:100A3000898322E030E0A20EB31E21E0E22EF12CE9 +:100A4000420114C092E0292E312C2A0C3B1CF501E6 +:100A50008080918016FF03C06E2D70E002C06FEFA2 +:100A60007FEFC4010E946F067C0151011F7715C002 +:100A700082E0282E312C2A0C3B1CF50180809180CD +:100A800016FF03C06E2D70E002C06FEF7FEFC40150 +:100A90000E9464067C011068510113FD1CC006C051 +:100AA00080E290E0B3010E947A06DA948D2D90E006 +:100AB000E816F906A8F30FC0F40117FD859117FF9A +:100AC00081914F0190E0B3010E947A06D110DA942F +:100AD0000894E108F108E114F10471F7E8C08436E4 +:100AE00011F0893659F5F50117FF07C08081918112 +:100AF000A281B38124E030E009C060817181CB0123 +:100B0000AA2797FDA095BA2F22E030E0A20EB31ECF +:100B1000012F0F76B7FF08C0B095A09590958195ED +:100B20009F4FAF4FBF4F0068BC01CD01A2012AE02B +:100B300030E00E94A606F82EF4183FC0853721F455 +:100B40001F7E2AE030E020C0197F8F36A9F0803761 +:100B500020F4883509F0AEC00BC0803721F088370B +:100B600009F0A8C001C0106114FF09C0146007C0DB +:100B700014FF08C0166006C028E030E005C020E180 +:100B800030E002C020E132E0F50117FF07C06081CC +:100B900071818281938144E050E006C0608171815F +:100BA00080E090E042E050E0A40EB51EA2010E9459 +:100BB000A606F82EF418012F0F7706FF09C00E7F46 +:100BC000FE1430F404FF06C002FD04C00F7E02C014 +:100BD0001F2D01C01E2D802F90E004FF0CC0FE01D0 +:100BE000EF0DF11D2081203311F4097E09C002FFB1 +:100BF00006C01E5F05C086789070009709F01F5FE1 +:100C0000802E992403FD12C000FF0DC0EF2C1D158E +:100C100050F4ED0CE11A1D2D06C080E290E0B30106 +:100C20000E947A061F5F1D15C0F304C01D1510F445 +:100C3000D11A01C0DD2484FE0FC080E390E0B3012F +:100C40000E947A0682FE1FC081FE03C088E590E004 +:100C500010C088E790E00DC0C401867890700097BE +:100C600091F081FC02C080E201C08BE207FD8DE2C1 +:100C700090E0B3010E947A0606C080E390E0B301E1 +:100C80000E947A06EA94FE14C0F3FA94F201EF0D82 +:100C9000F11D808190E0B3010E947A06FF20A9F740 +:100CA00006C080E290E0B3010E947A06DA94DD206B +:100CB000C1F740CEF3018681978102C08FEF9FEF8D +:100CC0002D96E2E10C942007FC01059061507040E4 +:100CD0000110D8F7809590958E0F9F1F0895FC0105 +:100CE0006150704001900110D8F7809590958E0F5B +:100CF0009F1F08950F931F93CF93DF938C01EB01F8 +:100D00008B8181FF1BC082FF0DC02E813F818C81B2 +:100D10009D812817390764F4E881F9810193F983EB +:100D2000E88306C0E885F985802F0995009731F49E +:100D30008E819F8101969F838E8302C00FEF1FEFEC +:100D4000C801DF91CF911F910F910895FA01AA2751 +:100D5000283051F1203181F1E8946F936E7F6E5FFE +:100D60007F4F8F4F9F4FAF4FB1E03ED0B4E03CD0AC +:100D7000670F781F891F9A1FA11D680F791F8A1F8F +:100D8000911DA11D6A0F711D811D911DA11D20D0F6 +:100D900009F468943F912AE0269F11243019305DB0 +:100DA0003193DEF6CF010895462F4770405D4193A1 +:100DB000B3E00FD0C9F7F6CF462F4F70405D4A33EE +:100DC00018F0495D31FD4052419302D0A9F7EACFB6 +:100DD000B4E0A6959795879577956795BA95C9F7E5 +:100DE00000976105710508959B01AC010A2E0694D8 +:100DF0005795479537952795BA95C9F7620F731F91 +:100E0000841F951FA01D08952F923F924F925F92CD +:100E10006F927F928F929F92AF92BF92CF92DF920A +:100E2000EF92FF920F931F93CF93DF93CDB7DEB76F +:100E3000CA1BDB0B0FB6F894DEBF0FBECDBF099403 +:100E40002A88398848885F846E847D848C849B845A +:100E5000AA84B984C884DF80EE80FD800C811B8168 +:100E6000AA81B981CE0FD11D0FB6F894DEBF0FBE97 +:0A0E7000CDBFED010895F894FFCF07 +:100E7A002D2052656164696E6720746F67676C65BF +:100E8A006420256420282564290A002B20537461D4 +:100E9A00746520746F67676C656420256420282553 +:100EAA0064290A0000000001000000000000C200DE +:100EBA000000000000020000000096000000000090 +:00000001FF diff --git a/button_debounce/main.lss b/button_debounce/main.lss new file mode 100644 index 0000000..3c6c4a3 --- /dev/null +++ b/button_debounce/main.lss @@ -0,0 +1,2051 @@ + +main.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .data 00000050 00800100 00000e7a 00000f0e 2**0 + CONTENTS, ALLOC, LOAD, DATA + 1 .text 00000e7a 00000000 00000000 00000094 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .bss 00000256 00800150 00800150 00000f5e 2**0 + ALLOC + 3 .stab 00000c84 00000000 00000000 00000f60 2**2 + CONTENTS, READONLY, DEBUGGING + 4 .stabstr 0000019d 00000000 00000000 00001be4 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .debug_aranges 000001c8 00000000 00000000 00001d88 2**3 + CONTENTS, READONLY, DEBUGGING + 6 .debug_info 0000145e 00000000 00000000 00001f50 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_abbrev 00000983 00000000 00000000 000033ae 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_line 00000953 00000000 00000000 00003d31 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_frame 0000035c 00000000 00000000 00004684 2**2 + CONTENTS, READONLY, DEBUGGING + 10 .debug_str 00000421 00000000 00000000 000049e0 2**0 + CONTENTS, READONLY, DEBUGGING + 11 .debug_loc 00000cc7 00000000 00000000 00004e01 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_ranges 00000048 00000000 00000000 00005ac8 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00000000 <__vectors>: + 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end> + 4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 1c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 28: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 2c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 30: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 34: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 38: 0c 94 7b 02 jmp 0x4f6 ; 0x4f6 <__vector_14> + 3c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 40: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 44: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 48: 0c 94 d7 00 jmp 0x1ae ; 0x1ae <__vector_18> + 4c: 0c 94 17 01 jmp 0x22e ; 0x22e <__vector_19> + 50: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 54: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 58: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 5c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 60: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 64: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + +00000068 <__ctors_end>: + 68: 11 24 eor r1, r1 + 6a: 1f be out 0x3f, r1 ; 63 + 6c: cf ef ldi r28, 0xFF ; 255 + 6e: d8 e0 ldi r29, 0x08 ; 8 + 70: de bf out 0x3e, r29 ; 62 + 72: cd bf out 0x3d, r28 ; 61 + +00000074 <__do_copy_data>: + 74: 11 e0 ldi r17, 0x01 ; 1 + 76: a0 e0 ldi r26, 0x00 ; 0 + 78: b1 e0 ldi r27, 0x01 ; 1 + 7a: ea e7 ldi r30, 0x7A ; 122 + 7c: fe e0 ldi r31, 0x0E ; 14 + 7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10> + 80: 05 90 lpm r0, Z+ + 82: 0d 92 st X+, r0 + 84: a0 35 cpi r26, 0x50 ; 80 + 86: b1 07 cpc r27, r17 + 88: d9 f7 brne .-10 ; 0x80 <__do_copy_data+0xc> + +0000008a <__do_clear_bss>: + 8a: 13 e0 ldi r17, 0x03 ; 3 + 8c: a0 e5 ldi r26, 0x50 ; 80 + 8e: b1 e0 ldi r27, 0x01 ; 1 + 90: 01 c0 rjmp .+2 ; 0x94 <.do_clear_bss_start> + +00000092 <.do_clear_bss_loop>: + 92: 1d 92 st X+, r1 + +00000094 <.do_clear_bss_start>: + 94: a6 3a cpi r26, 0xA6 ; 166 + 96: b1 07 cpc r27, r17 + 98: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop> + 9a: 0e 94 5b 03 call 0x6b6 ; 0x6b6
+ 9e: 0c 94 3b 07 jmp 0xe76 ; 0xe76 <_exit> + +000000a2 <__bad_interrupt>: + a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + +000000a6 : + /* Make PORTB5 (Arduino digital 13) an output by setting bit in DDR. */ + DDRB |= _BV(PORTB5); + +} + +uint8_t digital_read(int input_register, int pin) { + a6: cf 93 push r28 + a8: df 93 push r29 + aa: 00 d0 rcall .+0 ; 0xac + ac: cd b7 in r28, 0x3d ; 61 + ae: de b7 in r29, 0x3e ; 62 + b0: 9a 83 std Y+2, r25 ; 0x02 + b2: 89 83 std Y+1, r24 ; 0x01 + return bit_is_set(input_register, pin) != 0 ? 1 : 0; + b4: 89 81 ldd r24, Y+1 ; 0x01 + b6: 90 e0 ldi r25, 0x00 ; 0 + b8: 02 c0 rjmp .+4 ; 0xbe + ba: 95 95 asr r25 + bc: 87 95 ror r24 + be: 6a 95 dec r22 + c0: e2 f7 brpl .-8 ; 0xba +} + c2: 81 70 andi r24, 0x01 ; 1 + c4: 0f 90 pop r0 + c6: 0f 90 pop r0 + c8: df 91 pop r29 + ca: cf 91 pop r28 + cc: 08 95 ret + +000000ce : + +/* You could use cbi ie &= ~ or sbi ie |= but this makes code more readable. */ +void digital_write(volatile uint8_t *data_port, uint8_t pin, uint8_t value) { + ce: fc 01 movw r30, r24 + if (0 == value) { + *data_port &= ~(_BV(pin)); + d0: 20 81 ld r18, Z + d2: 81 e0 ldi r24, 0x01 ; 1 + d4: 90 e0 ldi r25, 0x00 ; 0 + d6: 02 c0 rjmp .+4 ; 0xdc + d8: 88 0f add r24, r24 + da: 99 1f adc r25, r25 + dc: 6a 95 dec r22 + de: e2 f7 brpl .-8 ; 0xd8 + return bit_is_set(input_register, pin) != 0 ? 1 : 0; +} + +/* You could use cbi ie &= ~ or sbi ie |= but this makes code more readable. */ +void digital_write(volatile uint8_t *data_port, uint8_t pin, uint8_t value) { + if (0 == value) { + e0: 44 23 and r20, r20 + e2: 21 f4 brne .+8 ; 0xec + *data_port &= ~(_BV(pin)); + e4: 80 95 com r24 + e6: 82 23 and r24, r18 + e8: 80 83 st Z, r24 + ea: 08 95 ret + } else { + *data_port |= _BV(pin); + ec: 28 2b or r18, r24 + ee: 20 83 st Z, r18 + f0: 08 95 ret + +000000f2 : + +/* http://www.cs.mun.ca/~rod/Winter2007/4723/notes/serial/serial.html */ + +void uart_init(void) { + + tx_buffer.start = 0; + f2: 10 92 51 03 sts 0x0351, r1 + f6: 10 92 50 03 sts 0x0350, r1 + tx_buffer.end = 0; + fa: 10 92 53 03 sts 0x0353, r1 + fe: 10 92 52 03 sts 0x0352, r1 + + rx_buffer.start = 0; + 102: 10 92 95 03 sts 0x0395, r1 + 106: 10 92 94 03 sts 0x0394, r1 + rx_buffer.end = 0; + 10a: 10 92 97 03 sts 0x0397, r1 + 10e: 10 92 96 03 sts 0x0396, r1 + + UBRR0H = UBRRH_VALUE; + 112: 10 92 c5 00 sts 0x00C5, r1 + UBRR0L = UBRRL_VALUE; + 116: 87 e6 ldi r24, 0x67 ; 103 + 118: 80 93 c4 00 sts 0x00C4, r24 + + UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); /* 8-bit data */ + 11c: 86 e0 ldi r24, 0x06 ; 6 + 11e: 80 93 c2 00 sts 0x00C2, r24 + UCSR0B = _BV(RXEN0) | _BV(TXEN0); /* Enable RX and TX */ + 122: 88 e1 ldi r24, 0x18 ; 24 + 124: 80 93 c1 00 sts 0x00C1, r24 + + sei(); + 128: 78 94 sei +} + 12a: 08 95 ret + +0000012c : + +int uart_putchar(char c, FILE *stream) { + 12c: 1f 93 push r17 + 12e: 18 2f mov r17, r24 + if (c == '\n') { + 130: 8a 30 cpi r24, 0x0A ; 10 + 132: 19 f4 brne .+6 ; 0x13a + uart_putchar('\r', stream); + 134: 8d e0 ldi r24, 0x0D ; 13 + 136: 0e 94 96 00 call 0x12c ; 0x12c + } + + int write_pointer = (tx_buffer.end + 1) % UART_TX_BUFFER_SIZE; + 13a: 20 91 52 03 lds r18, 0x0352 + 13e: 30 91 53 03 lds r19, 0x0353 + 142: c9 01 movw r24, r18 + 144: 01 96 adiw r24, 0x01 ; 1 + 146: 60 e0 ldi r22, 0x00 ; 0 + 148: 71 e0 ldi r23, 0x01 ; 1 + 14a: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4> + + if (write_pointer != tx_buffer.start){ + 14e: 40 91 50 03 lds r20, 0x0350 + 152: 50 91 51 03 lds r21, 0x0351 + 156: 84 17 cp r24, r20 + 158: 95 07 cpc r25, r21 + 15a: 81 f0 breq .+32 ; 0x17c + tx_buffer.buffer[tx_buffer.end] = c; + 15c: f9 01 movw r30, r18 + 15e: ee 0f add r30, r30 + 160: ff 1f adc r31, r31 + 162: e0 5b subi r30, 0xB0 ; 176 + 164: fe 4f sbci r31, 0xFE ; 254 + 166: 10 83 st Z, r17 + 168: 11 82 std Z+1, r1 ; 0x01 + tx_buffer.end = write_pointer; + 16a: 90 93 53 03 sts 0x0353, r25 + 16e: 80 93 52 03 sts 0x0352, r24 + + /* Data available. Enable the transmit interrupt for serial port 0. */ + UCSR0B |= _BV(UDRIE0); + 172: 80 91 c1 00 lds r24, 0x00C1 + 176: 80 62 ori r24, 0x20 ; 32 + 178: 80 93 c1 00 sts 0x00C1, r24 + } + + return 0; +} + 17c: 80 e0 ldi r24, 0x00 ; 0 + 17e: 90 e0 ldi r25, 0x00 ; 0 + 180: 1f 91 pop r17 + 182: 08 95 ret + +00000184 : + +int uart_getchar(FILE *stream) { + int read_pointer = (rx_buffer.start + 1) % UART_RX_BUFFER_SIZE; + 184: 80 91 94 03 lds r24, 0x0394 + 188: 90 91 95 03 lds r25, 0x0395 + 18c: 01 96 adiw r24, 0x01 ; 1 + 18e: 60 e2 ldi r22, 0x20 ; 32 + 190: 70 e0 ldi r23, 0x00 ; 0 + 192: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4> + + rx_buffer.start = read_pointer; + 196: 90 93 95 03 sts 0x0395, r25 + 19a: 80 93 94 03 sts 0x0394, r24 + return rx_buffer.buffer[read_pointer]; + 19e: fc 01 movw r30, r24 + 1a0: ee 0f add r30, r30 + 1a2: ff 1f adc r31, r31 + 1a4: ec 5a subi r30, 0xAC ; 172 + 1a6: fc 4f sbci r31, 0xFC ; 252 +} + 1a8: 80 81 ld r24, Z + 1aa: 91 81 ldd r25, Z+1 ; 0x01 + 1ac: 08 95 ret + +000001ae <__vector_18>: + +ISR(USART_RX_vect) { + 1ae: 1f 92 push r1 + 1b0: 0f 92 push r0 + 1b2: 0f b6 in r0, 0x3f ; 63 + 1b4: 0f 92 push r0 + 1b6: 11 24 eor r1, r1 + 1b8: 2f 93 push r18 + 1ba: 3f 93 push r19 + 1bc: 4f 93 push r20 + 1be: 5f 93 push r21 + 1c0: 6f 93 push r22 + 1c2: 7f 93 push r23 + 1c4: 8f 93 push r24 + 1c6: 9f 93 push r25 + 1c8: af 93 push r26 + 1ca: bf 93 push r27 + 1cc: ef 93 push r30 + 1ce: ff 93 push r31 + int write_pointer = (rx_buffer.end + 1) % UART_RX_BUFFER_SIZE; + 1d0: 20 91 96 03 lds r18, 0x0396 + 1d4: 30 91 97 03 lds r19, 0x0397 + 1d8: c9 01 movw r24, r18 + 1da: 01 96 adiw r24, 0x01 ; 1 + 1dc: 60 e2 ldi r22, 0x20 ; 32 + 1de: 70 e0 ldi r23, 0x00 ; 0 + 1e0: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4> + + /* Add next byte to ringbuffer if it has space available. */ + if (write_pointer != rx_buffer.start){ + 1e4: 40 91 94 03 lds r20, 0x0394 + 1e8: 50 91 95 03 lds r21, 0x0395 + 1ec: 84 17 cp r24, r20 + 1ee: 95 07 cpc r25, r21 + 1f0: 69 f0 breq .+26 ; 0x20c <__vector_18+0x5e> + rx_buffer.buffer[rx_buffer.end] = UDR0; + 1f2: 40 91 c6 00 lds r20, 0x00C6 + 1f6: f9 01 movw r30, r18 + 1f8: ee 0f add r30, r30 + 1fa: ff 1f adc r31, r31 + 1fc: ec 5a subi r30, 0xAC ; 172 + 1fe: fc 4f sbci r31, 0xFC ; 252 + 200: 40 83 st Z, r20 + 202: 11 82 std Z+1, r1 ; 0x01 + rx_buffer.end = write_pointer; + 204: 90 93 97 03 sts 0x0397, r25 + 208: 80 93 96 03 sts 0x0396, r24 + } +} + 20c: ff 91 pop r31 + 20e: ef 91 pop r30 + 210: bf 91 pop r27 + 212: af 91 pop r26 + 214: 9f 91 pop r25 + 216: 8f 91 pop r24 + 218: 7f 91 pop r23 + 21a: 6f 91 pop r22 + 21c: 5f 91 pop r21 + 21e: 4f 91 pop r20 + 220: 3f 91 pop r19 + 222: 2f 91 pop r18 + 224: 0f 90 pop r0 + 226: 0f be out 0x3f, r0 ; 63 + 228: 0f 90 pop r0 + 22a: 1f 90 pop r1 + 22c: 18 95 reti + +0000022e <__vector_19>: + +ISR(USART_UDRE_vect){ + 22e: 1f 92 push r1 + 230: 0f 92 push r0 + 232: 0f b6 in r0, 0x3f ; 63 + 234: 0f 92 push r0 + 236: 11 24 eor r1, r1 + 238: 2f 93 push r18 + 23a: 3f 93 push r19 + 23c: 5f 93 push r21 + 23e: 6f 93 push r22 + 240: 7f 93 push r23 + 242: 8f 93 push r24 + 244: 9f 93 push r25 + 246: af 93 push r26 + 248: bf 93 push r27 + 24a: ef 93 push r30 + 24c: ff 93 push r31 + int read_pointer = (tx_buffer.start + 1) % UART_TX_BUFFER_SIZE; + 24e: 80 91 50 03 lds r24, 0x0350 + 252: 90 91 51 03 lds r25, 0x0351 + 256: 01 96 adiw r24, 0x01 ; 1 + 258: 60 e0 ldi r22, 0x00 ; 0 + 25a: 71 e0 ldi r23, 0x01 ; 1 + 25c: 0e 94 48 04 call 0x890 ; 0x890 <__divmodhi4> + + /* Transmit next byte if data available in ringbuffer. */ + if (read_pointer != tx_buffer.end) { + 260: 20 91 52 03 lds r18, 0x0352 + 264: 30 91 53 03 lds r19, 0x0353 + 268: 82 17 cp r24, r18 + 26a: 93 07 cpc r25, r19 + 26c: 69 f0 breq .+26 ; 0x288 <__vector_19+0x5a> + UDR0 = tx_buffer.buffer[read_pointer]; + 26e: fc 01 movw r30, r24 + 270: ee 0f add r30, r30 + 272: ff 1f adc r31, r31 + 274: e0 5b subi r30, 0xB0 ; 176 + 276: fe 4f sbci r31, 0xFE ; 254 + 278: 20 81 ld r18, Z + 27a: 20 93 c6 00 sts 0x00C6, r18 + tx_buffer.start = read_pointer; + 27e: 90 93 51 03 sts 0x0351, r25 + 282: 80 93 50 03 sts 0x0350, r24 + 286: 05 c0 rjmp .+10 ; 0x292 <__vector_19+0x64> + } else { + /* Nothing to send. Disable the transmit interrupt for serial port 0. */ + UCSR0B &= ~_BV(UDRIE0); + 288: 80 91 c1 00 lds r24, 0x00C1 + 28c: 8f 7d andi r24, 0xDF ; 223 + 28e: 80 93 c1 00 sts 0x00C1, r24 + } +} + 292: ff 91 pop r31 + 294: ef 91 pop r30 + 296: bf 91 pop r27 + 298: af 91 pop r26 + 29a: 9f 91 pop r25 + 29c: 8f 91 pop r24 + 29e: 7f 91 pop r23 + 2a0: 6f 91 pop r22 + 2a2: 5f 91 pop r21 + 2a4: 3f 91 pop r19 + 2a6: 2f 91 pop r18 + 2a8: 0f 90 pop r0 + 2aa: 0f be out 0x3f, r0 ; 63 + 2ac: 0f 90 pop r0 + 2ae: 1f 90 pop r1 + 2b0: 18 95 reti + +000002b2 : + * Initializes the timer, and resets the timer count to 0. Sets up the ISRs + * linked with timer0. + */ +void timer_init(){ + //Set up the timer to run at F_CPU / 256, in normal mode (we reset TCNT0 in the ISR) + TCCR0A = 0x0; + 2b2: 14 bc out 0x24, r1 ; 36 + TCCR0B |= _BV(CS02); + 2b4: 85 b5 in r24, 0x25 ; 37 + 2b6: 84 60 ori r24, 0x04 ; 4 + 2b8: 85 bd out 0x25, r24 ; 37 + + //Set compare value to be F_CPU / 1000 -- fire interrupt every millisecond + OCR0A = F_CPU / 256 / 1000; + 2ba: 8e e3 ldi r24, 0x3E ; 62 + 2bc: 87 bd out 0x27, r24 ; 39 + + //Enable compare interrupt + TIMSK0 = _BV(OCIE0A); + 2be: 82 e0 ldi r24, 0x02 ; 2 + 2c0: 80 93 6e 00 sts 0x006E, r24 + + //Reset count variables + _timer_millis = 0; + 2c4: 10 92 98 03 sts 0x0398, r1 + 2c8: 10 92 99 03 sts 0x0399, r1 + 2cc: 10 92 9a 03 sts 0x039A, r1 + 2d0: 10 92 9b 03 sts 0x039B, r1 + 2d4: 10 92 9c 03 sts 0x039C, r1 + 2d8: 10 92 9d 03 sts 0x039D, r1 + 2dc: 10 92 9e 03 sts 0x039E, r1 + 2e0: 10 92 9f 03 sts 0x039F, r1 + + //Enable interrupts if the NO_INTERRUPT_ENABLE define is not set. If it is, you need to call sei() elsewhere. +#ifndef NO_INTERRUPT_ENABLE + sei(); + 2e4: 78 94 sei +#endif + + DDRB = 0xFF; + 2e6: 8f ef ldi r24, 0xFF ; 255 + 2e8: 84 b9 out 0x04, r24 ; 4 +} + 2ea: 08 95 ret + +000002ec : +/* + * Returns the number of milliseconds which have elapsed since the + * last time timer_init() was called. Overflows after about 49 days. + */ +uint64_t timer_millis(){ + return _timer_millis; + 2ec: 20 91 98 03 lds r18, 0x0398 + 2f0: 30 91 99 03 lds r19, 0x0399 + 2f4: 40 91 9a 03 lds r20, 0x039A + 2f8: 50 91 9b 03 lds r21, 0x039B + 2fc: 60 91 9c 03 lds r22, 0x039C + 300: 70 91 9d 03 lds r23, 0x039D + 304: 80 91 9e 03 lds r24, 0x039E + 308: 90 91 9f 03 lds r25, 0x039F +} + 30c: 08 95 ret + +0000030e : + +/* + * Returns the number of microseconds which have elapsed since the + * last time timer_init() was called. Overflows after about 71 minutes. + */ +uint64_t timer_micros(){ + 30e: 2f 92 push r2 + 310: 3f 92 push r3 + 312: 4f 92 push r4 + 314: 5f 92 push r5 + 316: 6f 92 push r6 + 318: 7f 92 push r7 + 31a: 8f 92 push r8 + 31c: 9f 92 push r9 + 31e: af 92 push r10 + 320: bf 92 push r11 + 322: cf 92 push r12 + 324: df 92 push r13 + 326: ef 92 push r14 + 328: ff 92 push r15 + 32a: 0f 93 push r16 + 32c: 1f 93 push r17 + 32e: cf 93 push r28 + 330: df 93 push r29 + 332: 0f 92 push r0 + 334: cd b7 in r28, 0x3d ; 61 + 336: de b7 in r29, 0x3e ; 62 + return (_timer_millis * 1000); + 338: 80 90 98 03 lds r8, 0x0398 + 33c: 70 90 99 03 lds r7, 0x0399 + 340: 60 90 9a 03 lds r6, 0x039A + 344: 50 90 9b 03 lds r5, 0x039B + 348: 40 90 9c 03 lds r4, 0x039C + 34c: 30 90 9d 03 lds r3, 0x039D + 350: 20 90 9e 03 lds r2, 0x039E + 354: 80 91 9f 03 lds r24, 0x039F + 358: 89 83 std Y+1, r24 ; 0x01 + 35a: 28 2d mov r18, r8 + 35c: 37 2d mov r19, r7 + 35e: 46 2d mov r20, r6 + 360: 55 2d mov r21, r5 + 362: 64 2d mov r22, r4 + 364: 73 2d mov r23, r3 + 366: 82 2d mov r24, r2 + 368: 99 81 ldd r25, Y+1 ; 0x01 + 36a: 02 e0 ldi r16, 0x02 ; 2 + 36c: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <__ashldi3> + 370: f2 2e mov r15, r18 + 372: 13 2f mov r17, r19 + 374: e4 2e mov r14, r20 + 376: d5 2e mov r13, r21 + 378: c6 2e mov r12, r22 + 37a: b7 2e mov r11, r23 + 37c: a8 2e mov r10, r24 + 37e: 99 2e mov r9, r25 + 380: 05 e0 ldi r16, 0x05 ; 5 + 382: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <__ashldi3> + 386: b2 2f mov r27, r18 + 388: bf 19 sub r27, r15 + 38a: f1 e0 ldi r31, 0x01 ; 1 + 38c: 2b 17 cp r18, r27 + 38e: 08 f0 brcs .+2 ; 0x392 + 390: f0 e0 ldi r31, 0x00 ; 0 + 392: 23 2f mov r18, r19 + 394: 21 1b sub r18, r17 + 396: e1 e0 ldi r30, 0x01 ; 1 + 398: 32 17 cp r19, r18 + 39a: 08 f0 brcs .+2 ; 0x39e + 39c: e0 e0 ldi r30, 0x00 ; 0 + 39e: 02 2f mov r16, r18 + 3a0: 0f 1b sub r16, r31 + 3a2: 31 e0 ldi r19, 0x01 ; 1 + 3a4: 20 17 cp r18, r16 + 3a6: 08 f0 brcs .+2 ; 0x3aa + 3a8: 30 e0 ldi r19, 0x00 ; 0 + 3aa: e3 2b or r30, r19 + 3ac: 34 2f mov r19, r20 + 3ae: 3e 19 sub r19, r14 + 3b0: 21 e0 ldi r18, 0x01 ; 1 + 3b2: 43 17 cp r20, r19 + 3b4: 08 f0 brcs .+2 ; 0x3b8 + 3b6: 20 e0 ldi r18, 0x00 ; 0 + 3b8: f3 2e mov r15, r19 + 3ba: fe 1a sub r15, r30 + 3bc: 41 e0 ldi r20, 0x01 ; 1 + 3be: 3f 15 cp r19, r15 + 3c0: 08 f0 brcs .+2 ; 0x3c4 + 3c2: 40 e0 ldi r20, 0x00 ; 0 + 3c4: 24 2b or r18, r20 + 3c6: 45 2f mov r20, r21 + 3c8: 4d 19 sub r20, r13 + 3ca: 31 e0 ldi r19, 0x01 ; 1 + 3cc: 54 17 cp r21, r20 + 3ce: 08 f0 brcs .+2 ; 0x3d2 + 3d0: 30 e0 ldi r19, 0x00 ; 0 + 3d2: 14 2f mov r17, r20 + 3d4: 12 1b sub r17, r18 + 3d6: 21 e0 ldi r18, 0x01 ; 1 + 3d8: 41 17 cp r20, r17 + 3da: 08 f0 brcs .+2 ; 0x3de + 3dc: 20 e0 ldi r18, 0x00 ; 0 + 3de: 32 2b or r19, r18 + 3e0: 46 2f mov r20, r22 + 3e2: 4c 19 sub r20, r12 + 3e4: 21 e0 ldi r18, 0x01 ; 1 + 3e6: 64 17 cp r22, r20 + 3e8: 08 f0 brcs .+2 ; 0x3ec + 3ea: 20 e0 ldi r18, 0x00 ; 0 + 3ec: a4 2f mov r26, r20 + 3ee: a3 1b sub r26, r19 + 3f0: 31 e0 ldi r19, 0x01 ; 1 + 3f2: 4a 17 cp r20, r26 + 3f4: 08 f0 brcs .+2 ; 0x3f8 + 3f6: 30 e0 ldi r19, 0x00 ; 0 + 3f8: 23 2b or r18, r19 + 3fa: 47 2f mov r20, r23 + 3fc: 4b 19 sub r20, r11 + 3fe: 31 e0 ldi r19, 0x01 ; 1 + 400: 74 17 cp r23, r20 + 402: 08 f0 brcs .+2 ; 0x406 + 404: 30 e0 ldi r19, 0x00 ; 0 + 406: e4 2f mov r30, r20 + 408: e2 1b sub r30, r18 + 40a: 21 e0 ldi r18, 0x01 ; 1 + 40c: 4e 17 cp r20, r30 + 40e: 08 f0 brcs .+2 ; 0x412 + 410: 20 e0 ldi r18, 0x00 ; 0 + 412: 32 2b or r19, r18 + 414: 48 2f mov r20, r24 + 416: 4a 19 sub r20, r10 + 418: 21 e0 ldi r18, 0x01 ; 1 + 41a: 84 17 cp r24, r20 + 41c: 08 f0 brcs .+2 ; 0x420 + 41e: 20 e0 ldi r18, 0x00 ; 0 + 420: f4 2f mov r31, r20 + 422: f3 1b sub r31, r19 + 424: 81 e0 ldi r24, 0x01 ; 1 + 426: 4f 17 cp r20, r31 + 428: 08 f0 brcs .+2 ; 0x42c + 42a: 80 e0 ldi r24, 0x00 ; 0 + 42c: 28 2b or r18, r24 + 42e: 99 19 sub r25, r9 + 430: 92 1b sub r25, r18 + 432: 2b 2f mov r18, r27 + 434: 28 0d add r18, r8 + 436: 31 e0 ldi r19, 0x01 ; 1 + 438: 2b 17 cp r18, r27 + 43a: 08 f0 brcs .+2 ; 0x43e + 43c: 30 e0 ldi r19, 0x00 ; 0 + 43e: 70 0e add r7, r16 + 440: 41 e0 ldi r20, 0x01 ; 1 + 442: 70 16 cp r7, r16 + 444: 08 f0 brcs .+2 ; 0x448 + 446: 40 e0 ldi r20, 0x00 ; 0 + 448: 37 0d add r19, r7 + 44a: 81 e0 ldi r24, 0x01 ; 1 + 44c: 37 15 cp r19, r7 + 44e: 08 f0 brcs .+2 ; 0x452 + 450: 80 e0 ldi r24, 0x00 ; 0 + 452: 48 2b or r20, r24 + 454: 6f 0c add r6, r15 + 456: 51 e0 ldi r21, 0x01 ; 1 + 458: 6f 14 cp r6, r15 + 45a: 08 f0 brcs .+2 ; 0x45e + 45c: 50 e0 ldi r21, 0x00 ; 0 + 45e: 46 0d add r20, r6 + 460: 81 e0 ldi r24, 0x01 ; 1 + 462: 46 15 cp r20, r6 + 464: 08 f0 brcs .+2 ; 0x468 + 466: 80 e0 ldi r24, 0x00 ; 0 + 468: 58 2b or r21, r24 + 46a: 51 0e add r5, r17 + 46c: 61 e0 ldi r22, 0x01 ; 1 + 46e: 51 16 cp r5, r17 + 470: 08 f0 brcs .+2 ; 0x474 + 472: 60 e0 ldi r22, 0x00 ; 0 + 474: 55 0d add r21, r5 + 476: 81 e0 ldi r24, 0x01 ; 1 + 478: 55 15 cp r21, r5 + 47a: 08 f0 brcs .+2 ; 0x47e + 47c: 80 e0 ldi r24, 0x00 ; 0 + 47e: 68 2b or r22, r24 + 480: 4a 0e add r4, r26 + 482: 71 e0 ldi r23, 0x01 ; 1 + 484: 4a 16 cp r4, r26 + 486: 08 f0 brcs .+2 ; 0x48a + 488: 70 e0 ldi r23, 0x00 ; 0 + 48a: 64 0d add r22, r4 + 48c: 81 e0 ldi r24, 0x01 ; 1 + 48e: 64 15 cp r22, r4 + 490: 08 f0 brcs .+2 ; 0x494 + 492: 80 e0 ldi r24, 0x00 ; 0 + 494: 78 2b or r23, r24 + 496: 3e 0e add r3, r30 + 498: 81 e0 ldi r24, 0x01 ; 1 + 49a: 3e 16 cp r3, r30 + 49c: 08 f0 brcs .+2 ; 0x4a0 + 49e: 80 e0 ldi r24, 0x00 ; 0 + 4a0: 73 0d add r23, r3 + 4a2: e1 e0 ldi r30, 0x01 ; 1 + 4a4: 73 15 cp r23, r3 + 4a6: 08 f0 brcs .+2 ; 0x4aa + 4a8: e0 e0 ldi r30, 0x00 ; 0 + 4aa: 8e 2b or r24, r30 + 4ac: 2f 0e add r2, r31 + 4ae: e1 e0 ldi r30, 0x01 ; 1 + 4b0: 2f 16 cp r2, r31 + 4b2: 08 f0 brcs .+2 ; 0x4b6 + 4b4: e0 e0 ldi r30, 0x00 ; 0 + 4b6: 82 0d add r24, r2 + 4b8: f1 e0 ldi r31, 0x01 ; 1 + 4ba: 82 15 cp r24, r2 + 4bc: 08 f0 brcs .+2 ; 0x4c0 + 4be: f0 e0 ldi r31, 0x00 ; 0 + 4c0: ef 2b or r30, r31 + 4c2: a9 81 ldd r26, Y+1 ; 0x01 + 4c4: 9a 0f add r25, r26 + 4c6: 9e 0f add r25, r30 + 4c8: 03 e0 ldi r16, 0x03 ; 3 + 4ca: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <__ashldi3> +} + 4ce: 0f 90 pop r0 + 4d0: df 91 pop r29 + 4d2: cf 91 pop r28 + 4d4: 1f 91 pop r17 + 4d6: 0f 91 pop r16 + 4d8: ff 90 pop r15 + 4da: ef 90 pop r14 + 4dc: df 90 pop r13 + 4de: cf 90 pop r12 + 4e0: bf 90 pop r11 + 4e2: af 90 pop r10 + 4e4: 9f 90 pop r9 + 4e6: 8f 90 pop r8 + 4e8: 7f 90 pop r7 + 4ea: 6f 90 pop r6 + 4ec: 5f 90 pop r5 + 4ee: 4f 90 pop r4 + 4f0: 3f 90 pop r3 + 4f2: 2f 90 pop r2 + 4f4: 08 95 ret + +000004f6 <__vector_14>: + +/* + * The ISR for timer0 overflow. Increment the _timer_count here, and do the calculcations + * to increment _timer_millis as needed. + */ +ISR(TIMER0_COMPA_vect){ + 4f6: 1f 92 push r1 + 4f8: 0f 92 push r0 + 4fa: 0f b6 in r0, 0x3f ; 63 + 4fc: 0f 92 push r0 + 4fe: 11 24 eor r1, r1 + 500: 2f 93 push r18 + 502: 3f 93 push r19 + 504: 4f 93 push r20 + 506: 5f 93 push r21 + 508: 6f 93 push r22 + 50a: 7f 93 push r23 + 50c: 8f 93 push r24 + 50e: 9f 93 push r25 + 510: af 93 push r26 + 512: ef 93 push r30 + 514: ff 93 push r31 + TCNT0 = 0; + 516: 16 bc out 0x26, r1 ; 38 + _timer_millis++; + 518: 40 91 98 03 lds r20, 0x0398 + 51c: 30 91 99 03 lds r19, 0x0399 + 520: 20 91 9a 03 lds r18, 0x039A + 524: 90 91 9b 03 lds r25, 0x039B + 528: 80 91 9c 03 lds r24, 0x039C + 52c: f0 91 9d 03 lds r31, 0x039D + 530: e0 91 9e 03 lds r30, 0x039E + 534: a0 91 9f 03 lds r26, 0x039F + 538: 64 2f mov r22, r20 + 53a: 6f 5f subi r22, 0xFF ; 255 + 53c: 51 e0 ldi r21, 0x01 ; 1 + 53e: 64 17 cp r22, r20 + 540: 08 f0 brcs .+2 ; 0x544 <__vector_14+0x4e> + 542: 50 e0 ldi r21, 0x00 ; 0 + 544: 53 0f add r21, r19 + 546: 41 e0 ldi r20, 0x01 ; 1 + 548: 53 17 cp r21, r19 + 54a: 08 f0 brcs .+2 ; 0x54e <__vector_14+0x58> + 54c: 40 e0 ldi r20, 0x00 ; 0 + 54e: 42 0f add r20, r18 + 550: 31 e0 ldi r19, 0x01 ; 1 + 552: 42 17 cp r20, r18 + 554: 08 f0 brcs .+2 ; 0x558 <__vector_14+0x62> + 556: 30 e0 ldi r19, 0x00 ; 0 + 558: 39 0f add r19, r25 + 55a: 21 e0 ldi r18, 0x01 ; 1 + 55c: 39 17 cp r19, r25 + 55e: 08 f0 brcs .+2 ; 0x562 <__vector_14+0x6c> + 560: 20 e0 ldi r18, 0x00 ; 0 + 562: 28 0f add r18, r24 + 564: 91 e0 ldi r25, 0x01 ; 1 + 566: 28 17 cp r18, r24 + 568: 08 f0 brcs .+2 ; 0x56c <__vector_14+0x76> + 56a: 90 e0 ldi r25, 0x00 ; 0 + 56c: 9f 0f add r25, r31 + 56e: 81 e0 ldi r24, 0x01 ; 1 + 570: 9f 17 cp r25, r31 + 572: 08 f0 brcs .+2 ; 0x576 <__vector_14+0x80> + 574: 80 e0 ldi r24, 0x00 ; 0 + 576: 8e 0f add r24, r30 + 578: 71 e0 ldi r23, 0x01 ; 1 + 57a: 8e 17 cp r24, r30 + 57c: 08 f0 brcs .+2 ; 0x580 <__vector_14+0x8a> + 57e: 70 e0 ldi r23, 0x00 ; 0 + 580: 7a 0f add r23, r26 + 582: 60 93 98 03 sts 0x0398, r22 + 586: 50 93 99 03 sts 0x0399, r21 + 58a: 40 93 9a 03 sts 0x039A, r20 + 58e: 30 93 9b 03 sts 0x039B, r19 + 592: 20 93 9c 03 sts 0x039C, r18 + 596: 90 93 9d 03 sts 0x039D, r25 + 59a: 80 93 9e 03 sts 0x039E, r24 + 59e: 70 93 9f 03 sts 0x039F, r23 +} + 5a2: ff 91 pop r31 + 5a4: ef 91 pop r30 + 5a6: af 91 pop r26 + 5a8: 9f 91 pop r25 + 5aa: 8f 91 pop r24 + 5ac: 7f 91 pop r23 + 5ae: 6f 91 pop r22 + 5b0: 5f 91 pop r21 + 5b2: 4f 91 pop r20 + 5b4: 3f 91 pop r19 + 5b6: 2f 91 pop r18 + 5b8: 0f 90 pop r0 + 5ba: 0f be out 0x3f, r0 ; 63 + 5bc: 0f 90 pop r0 + 5be: 1f 90 pop r1 + 5c0: 18 95 reti + +000005c2 <__ashldi3>: + 5c2: cf 92 push r12 + 5c4: df 92 push r13 + 5c6: ef 92 push r14 + 5c8: ff 92 push r15 + 5ca: 0f 93 push r16 + 5cc: cf 93 push r28 + 5ce: df 93 push r29 + 5d0: cd b7 in r28, 0x3d ; 61 + 5d2: de b7 in r29, 0x3e ; 62 + 5d4: 60 97 sbiw r28, 0x10 ; 16 + 5d6: 0f b6 in r0, 0x3f ; 63 + 5d8: f8 94 cli + 5da: de bf out 0x3e, r29 ; 62 + 5dc: 0f be out 0x3f, r0 ; 63 + 5de: cd bf out 0x3d, r28 ; 61 + 5e0: 00 23 and r16, r16 + 5e2: 09 f4 brne .+2 ; 0x5e6 <__ashldi3+0x24> + 5e4: 5a c0 rjmp .+180 ; 0x69a <__ashldi3+0xd8> + 5e6: 29 87 std Y+9, r18 ; 0x09 + 5e8: 3a 87 std Y+10, r19 ; 0x0a + 5ea: 4b 87 std Y+11, r20 ; 0x0b + 5ec: 5c 87 std Y+12, r21 ; 0x0c + 5ee: 6d 87 std Y+13, r22 ; 0x0d + 5f0: 7e 87 std Y+14, r23 ; 0x0e + 5f2: 8f 87 std Y+15, r24 ; 0x0f + 5f4: 98 8b std Y+16, r25 ; 0x10 + 5f6: 80 e2 ldi r24, 0x20 ; 32 + 5f8: 80 1b sub r24, r16 + 5fa: 49 85 ldd r20, Y+9 ; 0x09 + 5fc: 5a 85 ldd r21, Y+10 ; 0x0a + 5fe: 6b 85 ldd r22, Y+11 ; 0x0b + 600: 7c 85 ldd r23, Y+12 ; 0x0c + 602: 18 16 cp r1, r24 + 604: b4 f0 brlt .+44 ; 0x632 <__ashldi3+0x70> + 606: 19 82 std Y+1, r1 ; 0x01 + 608: 1a 82 std Y+2, r1 ; 0x02 + 60a: 1b 82 std Y+3, r1 ; 0x03 + 60c: 1c 82 std Y+4, r1 ; 0x04 + 60e: 99 27 eor r25, r25 + 610: 87 fd sbrc r24, 7 + 612: 90 95 com r25 + 614: 90 95 com r25 + 616: 81 95 neg r24 + 618: 9f 4f sbci r25, 0xFF ; 255 + 61a: 04 c0 rjmp .+8 ; 0x624 <__ashldi3+0x62> + 61c: 44 0f add r20, r20 + 61e: 55 1f adc r21, r21 + 620: 66 1f adc r22, r22 + 622: 77 1f adc r23, r23 + 624: 8a 95 dec r24 + 626: d2 f7 brpl .-12 ; 0x61c <__ashldi3+0x5a> + 628: 4d 83 std Y+5, r20 ; 0x05 + 62a: 5e 83 std Y+6, r21 ; 0x06 + 62c: 6f 83 std Y+7, r22 ; 0x07 + 62e: 78 87 std Y+8, r23 ; 0x08 + 630: 2c c0 rjmp .+88 ; 0x68a <__ashldi3+0xc8> + 632: 6a 01 movw r12, r20 + 634: 7b 01 movw r14, r22 + 636: 00 2e mov r0, r16 + 638: 04 c0 rjmp .+8 ; 0x642 <__ashldi3+0x80> + 63a: cc 0c add r12, r12 + 63c: dd 1c adc r13, r13 + 63e: ee 1c adc r14, r14 + 640: ff 1c adc r15, r15 + 642: 0a 94 dec r0 + 644: d2 f7 brpl .-12 ; 0x63a <__ashldi3+0x78> + 646: c9 82 std Y+1, r12 ; 0x01 + 648: da 82 std Y+2, r13 ; 0x02 + 64a: eb 82 std Y+3, r14 ; 0x03 + 64c: fc 82 std Y+4, r15 ; 0x04 + 64e: 6a 01 movw r12, r20 + 650: 7b 01 movw r14, r22 + 652: 04 c0 rjmp .+8 ; 0x65c <__ashldi3+0x9a> + 654: f6 94 lsr r15 + 656: e7 94 ror r14 + 658: d7 94 ror r13 + 65a: c7 94 ror r12 + 65c: 8a 95 dec r24 + 65e: d2 f7 brpl .-12 ; 0x654 <__ashldi3+0x92> + 660: d7 01 movw r26, r14 + 662: c6 01 movw r24, r12 + 664: 4d 85 ldd r20, Y+13 ; 0x0d + 666: 5e 85 ldd r21, Y+14 ; 0x0e + 668: 6f 85 ldd r22, Y+15 ; 0x0f + 66a: 78 89 ldd r23, Y+16 ; 0x10 + 66c: 04 c0 rjmp .+8 ; 0x676 <__ashldi3+0xb4> + 66e: 44 0f add r20, r20 + 670: 55 1f adc r21, r21 + 672: 66 1f adc r22, r22 + 674: 77 1f adc r23, r23 + 676: 0a 95 dec r16 + 678: d2 f7 brpl .-12 ; 0x66e <__ashldi3+0xac> + 67a: 84 2b or r24, r20 + 67c: 95 2b or r25, r21 + 67e: a6 2b or r26, r22 + 680: b7 2b or r27, r23 + 682: 8d 83 std Y+5, r24 ; 0x05 + 684: 9e 83 std Y+6, r25 ; 0x06 + 686: af 83 std Y+7, r26 ; 0x07 + 688: b8 87 std Y+8, r27 ; 0x08 + 68a: 29 81 ldd r18, Y+1 ; 0x01 + 68c: 3a 81 ldd r19, Y+2 ; 0x02 + 68e: 4b 81 ldd r20, Y+3 ; 0x03 + 690: 5c 81 ldd r21, Y+4 ; 0x04 + 692: 6d 81 ldd r22, Y+5 ; 0x05 + 694: 7e 81 ldd r23, Y+6 ; 0x06 + 696: 8f 81 ldd r24, Y+7 ; 0x07 + 698: 98 85 ldd r25, Y+8 ; 0x08 + 69a: 60 96 adiw r28, 0x10 ; 16 + 69c: 0f b6 in r0, 0x3f ; 63 + 69e: f8 94 cli + 6a0: de bf out 0x3e, r29 ; 62 + 6a2: 0f be out 0x3f, r0 ; 63 + 6a4: cd bf out 0x3d, r28 ; 61 + 6a6: df 91 pop r29 + 6a8: cf 91 pop r28 + 6aa: 0f 91 pop r16 + 6ac: ff 90 pop r15 + 6ae: ef 90 pop r14 + 6b0: df 90 pop r13 + 6b2: cf 90 pop r12 + 6b4: 08 95 ret + +000006b6
: + } +} + +int main(void) { + 6b6: cf 93 push r28 + 6b8: df 93 push r29 + 6ba: 00 d0 rcall .+0 ; 0x6bc + 6bc: cd b7 in r28, 0x3d ; 61 + 6be: de b7 in r29, 0x3e ; 62 +#include "timer.h" + +void init(void) { + + /* Make PORTD2 (Arduino digital 2) input by clearing bit in DDR */ + DDRD &= ~(_BV(PORTD2)); + 6c0: 52 98 cbi 0x0a, 2 ; 10 + /* you don’t connect anything to pin and if you try to read it, it will read as 1. Now, */ + /* when you externally drive that pin to zero(i.e. connect to ground / or pull-down), */ + /* only then it will be read as 0. */ + + /* Enable pullups by setting bits in PORT. Default state is now high. */ + PORTD |= (_BV(PORTD2)); + 6c2: 5a 9a sbi 0x0b, 2 ; 11 + + /* Make PORTB5 (Arduino digital 13) an output by setting bit in DDR. */ + DDRB |= _BV(PORTB5); + 6c4: 25 9a sbi 0x04, 5 ; 4 +} + +int main(void) { + + init(); + timer_init(); + 6c6: 0e 94 59 01 call 0x2b2 ; 0x2b2 + uart_init(); + 6ca: 0e 94 79 00 call 0xf2 ; 0xf2 + stdout = &uart_output; + 6ce: 82 e4 ldi r24, 0x42 ; 66 + 6d0: 91 e0 ldi r25, 0x01 ; 1 + 6d2: 90 93 a3 03 sts 0x03A3, r25 + 6d6: 80 93 a2 03 sts 0x03A2, r24 + stdin = &uart_input; + 6da: 84 e3 ldi r24, 0x34 ; 52 + 6dc: 91 e0 ldi r25, 0x01 ; 1 + 6de: 90 93 a1 03 sts 0x03A1, r25 + 6e2: 80 93 a0 03 sts 0x03A0, r24 + + uint8_t current_reading; + uint8_t previous_reading = 0; + uint8_t current_state = 0; + uint8_t previous_state = 0; + 6e6: 77 24 eor r7, r7 + stdout = &uart_output; + stdin = &uart_input; + + uint8_t current_reading; + uint8_t previous_reading = 0; + uint8_t current_state = 0; + 6e8: 00 e0 ldi r16, 0x00 ; 0 + uart_init(); + stdout = &uart_output; + stdin = &uart_input; + + uint8_t current_reading; + uint8_t previous_reading = 0; + 6ea: 20 e0 ldi r18, 0x00 ; 0 + + current_reading = digital_read(PIND, PIND2); + if (current_reading != previous_reading) { + /* Note the time in millis of last change of button state. */ + last_toggle_time = timer_millis(); + printf("- Reading toggled %d (%d)\n", current_reading, last_toggle_time); + 6ec: 40 e0 ldi r20, 0x00 ; 0 + 6ee: 44 2e mov r4, r20 + 6f0: 41 e0 ldi r20, 0x01 ; 1 + 6f2: 54 2e mov r5, r20 + current_state = current_reading; + } + + /* Just for debugging purposes. */ + if (current_state != previous_state) { + printf("+ State toggled %d (%d)\n", current_state, last_toggle_time); + 6f4: 5b e1 ldi r21, 0x1B ; 27 + 6f6: 25 2e mov r2, r21 + 6f8: 51 e0 ldi r21, 0x01 ; 1 + 6fa: 35 2e mov r3, r21 + 6fc: 01 c0 rjmp .+2 ; 0x700 + DDRB |= _BV(PORTB5); + +} + +uint8_t digital_read(int input_register, int pin) { + return bit_is_set(input_register, pin) != 0 ? 1 : 0; + 6fe: 21 2f mov r18, r17 + + uint64_t last_toggle_time; + + while (1) { + + current_reading = digital_read(PIND, PIND2); + 700: 89 b1 in r24, 0x09 ; 9 + 702: 89 83 std Y+1, r24 ; 0x01 + 704: 1a 82 std Y+2, r1 ; 0x02 + DDRB |= _BV(PORTB5); + +} + +uint8_t digital_read(int input_register, int pin) { + return bit_is_set(input_register, pin) != 0 ? 1 : 0; + 706: 89 81 ldd r24, Y+1 ; 0x01 + 708: 90 e0 ldi r25, 0x00 ; 0 + 70a: 95 95 asr r25 + 70c: 87 95 ror r24 + 70e: 95 95 asr r25 + 710: 87 95 ror r24 + 712: 18 2f mov r17, r24 + 714: 11 70 andi r17, 0x01 ; 1 + uint64_t last_toggle_time; + + while (1) { + + current_reading = digital_read(PIND, PIND2); + if (current_reading != previous_reading) { + 716: 12 17 cp r17, r18 + 718: 59 f1 breq .+86 ; 0x770 + /* Note the time in millis of last change of button state. */ + last_toggle_time = timer_millis(); + 71a: 0e 94 76 01 call 0x2ec ; 0x2ec + 71e: 49 01 movw r8, r18 + 720: 5a 01 movw r10, r20 + 722: 6b 01 movw r12, r22 + 724: 7c 01 movw r14, r24 + printf("- Reading toggled %d (%d)\n", current_reading, last_toggle_time); + 726: 8d b7 in r24, 0x3d ; 61 + 728: 9e b7 in r25, 0x3e ; 62 + 72a: 0c 97 sbiw r24, 0x0c ; 12 + 72c: 0f b6 in r0, 0x3f ; 63 + 72e: f8 94 cli + 730: 9e bf out 0x3e, r25 ; 62 + 732: 0f be out 0x3f, r0 ; 63 + 734: 8d bf out 0x3d, r24 ; 61 + 736: ed b7 in r30, 0x3d ; 61 + 738: fe b7 in r31, 0x3e ; 62 + 73a: 31 96 adiw r30, 0x01 ; 1 + 73c: ad b7 in r26, 0x3d ; 61 + 73e: be b7 in r27, 0x3e ; 62 + 740: 12 96 adiw r26, 0x02 ; 2 + 742: 5c 92 st X, r5 + 744: 4e 92 st -X, r4 + 746: 11 97 sbiw r26, 0x01 ; 1 + 748: 12 83 std Z+2, r17 ; 0x02 + 74a: 13 82 std Z+3, r1 ; 0x03 + 74c: 84 82 std Z+4, r8 ; 0x04 + 74e: 95 82 std Z+5, r9 ; 0x05 + 750: a6 82 std Z+6, r10 ; 0x06 + 752: b7 82 std Z+7, r11 ; 0x07 + 754: c0 86 std Z+8, r12 ; 0x08 + 756: d1 86 std Z+9, r13 ; 0x09 + 758: e2 86 std Z+10, r14 ; 0x0a + 75a: f3 86 std Z+11, r15 ; 0x0b + 75c: 0e 94 6f 04 call 0x8de ; 0x8de + 760: 8d b7 in r24, 0x3d ; 61 + 762: 9e b7 in r25, 0x3e ; 62 + 764: 0c 96 adiw r24, 0x0c ; 12 + 766: 0f b6 in r0, 0x3f ; 63 + 768: f8 94 cli + 76a: 9e bf out 0x3e, r25 ; 62 + 76c: 0f be out 0x3f, r0 ; 63 + 76e: 8d bf out 0x3d, r24 ; 61 + } + + /* If there has been more than 10 millis since last toggling */ + /* of button state, assume it is real and not bouncing noise. */ + if ((timer_millis() - last_toggle_time) > 10) { + 770: 0e 94 76 01 call 0x2ec ; 0x2ec + 774: e2 2f mov r30, r18 + 776: e8 19 sub r30, r8 + 778: f1 e0 ldi r31, 0x01 ; 1 + 77a: 2e 17 cp r18, r30 + 77c: 08 f0 brcs .+2 ; 0x780 + 77e: f0 e0 ldi r31, 0x00 ; 0 + 780: a3 2f mov r26, r19 + 782: a9 19 sub r26, r9 + 784: 21 e0 ldi r18, 0x01 ; 1 + 786: 3a 17 cp r19, r26 + 788: 08 f0 brcs .+2 ; 0x78c + 78a: 20 e0 ldi r18, 0x00 ; 0 + 78c: 3a 2f mov r19, r26 + 78e: 3f 1b sub r19, r31 + 790: f1 e0 ldi r31, 0x01 ; 1 + 792: a3 17 cp r26, r19 + 794: 08 f0 brcs .+2 ; 0x798 + 796: f0 e0 ldi r31, 0x00 ; 0 + 798: 2f 2b or r18, r31 + 79a: a4 2f mov r26, r20 + 79c: aa 19 sub r26, r10 + 79e: f1 e0 ldi r31, 0x01 ; 1 + 7a0: 4a 17 cp r20, r26 + 7a2: 08 f0 brcs .+2 ; 0x7a6 + 7a4: f0 e0 ldi r31, 0x00 ; 0 + 7a6: 4a 2f mov r20, r26 + 7a8: 42 1b sub r20, r18 + 7aa: 21 e0 ldi r18, 0x01 ; 1 + 7ac: a4 17 cp r26, r20 + 7ae: 08 f0 brcs .+2 ; 0x7b2 + 7b0: 20 e0 ldi r18, 0x00 ; 0 + 7b2: f2 2b or r31, r18 + 7b4: a5 2f mov r26, r21 + 7b6: ab 19 sub r26, r11 + 7b8: 21 e0 ldi r18, 0x01 ; 1 + 7ba: 5a 17 cp r21, r26 + 7bc: 08 f0 brcs .+2 ; 0x7c0 + 7be: 20 e0 ldi r18, 0x00 ; 0 + 7c0: 5a 2f mov r21, r26 + 7c2: 5f 1b sub r21, r31 + 7c4: f1 e0 ldi r31, 0x01 ; 1 + 7c6: a5 17 cp r26, r21 + 7c8: 08 f0 brcs .+2 ; 0x7cc + 7ca: f0 e0 ldi r31, 0x00 ; 0 + 7cc: 2f 2b or r18, r31 + 7ce: a6 2f mov r26, r22 + 7d0: ac 19 sub r26, r12 + 7d2: f1 e0 ldi r31, 0x01 ; 1 + 7d4: 6a 17 cp r22, r26 + 7d6: 08 f0 brcs .+2 ; 0x7da + 7d8: f0 e0 ldi r31, 0x00 ; 0 + 7da: 6a 2f mov r22, r26 + 7dc: 62 1b sub r22, r18 + 7de: 21 e0 ldi r18, 0x01 ; 1 + 7e0: a6 17 cp r26, r22 + 7e2: 08 f0 brcs .+2 ; 0x7e6 + 7e4: 20 e0 ldi r18, 0x00 ; 0 + 7e6: f2 2b or r31, r18 + 7e8: 27 2f mov r18, r23 + 7ea: 2d 19 sub r18, r13 + 7ec: a1 e0 ldi r26, 0x01 ; 1 + 7ee: 72 17 cp r23, r18 + 7f0: 08 f0 brcs .+2 ; 0x7f4 + 7f2: a0 e0 ldi r26, 0x00 ; 0 + 7f4: 72 2f mov r23, r18 + 7f6: 7f 1b sub r23, r31 + 7f8: f1 e0 ldi r31, 0x01 ; 1 + 7fa: 27 17 cp r18, r23 + 7fc: 08 f0 brcs .+2 ; 0x800 + 7fe: f0 e0 ldi r31, 0x00 ; 0 + 800: af 2b or r26, r31 + 802: f8 2f mov r31, r24 + 804: fe 19 sub r31, r14 + 806: 21 e0 ldi r18, 0x01 ; 1 + 808: 8f 17 cp r24, r31 + 80a: 08 f0 brcs .+2 ; 0x80e + 80c: 20 e0 ldi r18, 0x00 ; 0 + 80e: 8f 2f mov r24, r31 + 810: 8a 1b sub r24, r26 + 812: a1 e0 ldi r26, 0x01 ; 1 + 814: f8 17 cp r31, r24 + 816: 08 f0 brcs .+2 ; 0x81a + 818: a0 e0 ldi r26, 0x00 ; 0 + 81a: 2a 2b or r18, r26 + 81c: 9f 19 sub r25, r15 + 81e: 92 17 cp r25, r18 + 820: 71 f4 brne .+28 ; 0x83e + 822: 88 23 and r24, r24 + 824: 61 f4 brne .+24 ; 0x83e + 826: 77 23 and r23, r23 + 828: 51 f4 brne .+20 ; 0x83e + 82a: 66 23 and r22, r22 + 82c: 41 f4 brne .+16 ; 0x83e + 82e: 55 23 and r21, r21 + 830: 31 f4 brne .+12 ; 0x83e + 832: 44 23 and r20, r20 + 834: 21 f4 brne .+8 ; 0x83e + 836: 33 23 and r19, r19 + 838: 11 f4 brne .+4 ; 0x83e + 83a: eb 30 cpi r30, 0x0B ; 11 + 83c: 08 f0 brcs .+2 ; 0x840 + DDRB |= _BV(PORTB5); + +} + +uint8_t digital_read(int input_register, int pin) { + return bit_is_set(input_register, pin) != 0 ? 1 : 0; + 83e: 01 2f mov r16, r17 + if ((timer_millis() - last_toggle_time) > 10) { + current_state = current_reading; + } + + /* Just for debugging purposes. */ + if (current_state != previous_state) { + 840: 07 15 cp r16, r7 + 842: 09 f4 brne .+2 ; 0x846 + 844: 5c cf rjmp .-328 ; 0x6fe + printf("+ State toggled %d (%d)\n", current_state, last_toggle_time); + 846: ad b7 in r26, 0x3d ; 61 + 848: be b7 in r27, 0x3e ; 62 + 84a: 1c 97 sbiw r26, 0x0c ; 12 + 84c: 0f b6 in r0, 0x3f ; 63 + 84e: f8 94 cli + 850: be bf out 0x3e, r27 ; 62 + 852: 0f be out 0x3f, r0 ; 63 + 854: ad bf out 0x3d, r26 ; 61 + 856: ed b7 in r30, 0x3d ; 61 + 858: fe b7 in r31, 0x3e ; 62 + 85a: 31 96 adiw r30, 0x01 ; 1 + 85c: 12 96 adiw r26, 0x02 ; 2 + 85e: 3c 92 st X, r3 + 860: 2e 92 st -X, r2 + 862: 11 97 sbiw r26, 0x01 ; 1 + 864: 02 83 std Z+2, r16 ; 0x02 + 866: 13 82 std Z+3, r1 ; 0x03 + 868: 84 82 std Z+4, r8 ; 0x04 + 86a: 95 82 std Z+5, r9 ; 0x05 + 86c: a6 82 std Z+6, r10 ; 0x06 + 86e: b7 82 std Z+7, r11 ; 0x07 + 870: c0 86 std Z+8, r12 ; 0x08 + 872: d1 86 std Z+9, r13 ; 0x09 + 874: e2 86 std Z+10, r14 ; 0x0a + 876: f3 86 std Z+11, r15 ; 0x0b + 878: 0e 94 6f 04 call 0x8de ; 0x8de + 87c: 8d b7 in r24, 0x3d ; 61 + 87e: 9e b7 in r25, 0x3e ; 62 + 880: 0c 96 adiw r24, 0x0c ; 12 + 882: 0f b6 in r0, 0x3f ; 63 + 884: f8 94 cli + 886: 9e bf out 0x3e, r25 ; 62 + 888: 0f be out 0x3f, r0 ; 63 + 88a: 8d bf out 0x3d, r24 ; 61 + 88c: 70 2e mov r7, r16 + 88e: 37 cf rjmp .-402 ; 0x6fe + +00000890 <__divmodhi4>: + 890: 97 fb bst r25, 7 + 892: 09 2e mov r0, r25 + 894: 07 26 eor r0, r23 + 896: 0a d0 rcall .+20 ; 0x8ac <__divmodhi4_neg1> + 898: 77 fd sbrc r23, 7 + 89a: 04 d0 rcall .+8 ; 0x8a4 <__divmodhi4_neg2> + 89c: 0c d0 rcall .+24 ; 0x8b6 <__udivmodhi4> + 89e: 06 d0 rcall .+12 ; 0x8ac <__divmodhi4_neg1> + 8a0: 00 20 and r0, r0 + 8a2: 1a f4 brpl .+6 ; 0x8aa <__divmodhi4_exit> + +000008a4 <__divmodhi4_neg2>: + 8a4: 70 95 com r23 + 8a6: 61 95 neg r22 + 8a8: 7f 4f sbci r23, 0xFF ; 255 + +000008aa <__divmodhi4_exit>: + 8aa: 08 95 ret + +000008ac <__divmodhi4_neg1>: + 8ac: f6 f7 brtc .-4 ; 0x8aa <__divmodhi4_exit> + 8ae: 90 95 com r25 + 8b0: 81 95 neg r24 + 8b2: 9f 4f sbci r25, 0xFF ; 255 + 8b4: 08 95 ret + +000008b6 <__udivmodhi4>: + 8b6: aa 1b sub r26, r26 + 8b8: bb 1b sub r27, r27 + 8ba: 51 e1 ldi r21, 0x11 ; 17 + 8bc: 07 c0 rjmp .+14 ; 0x8cc <__udivmodhi4_ep> + +000008be <__udivmodhi4_loop>: + 8be: aa 1f adc r26, r26 + 8c0: bb 1f adc r27, r27 + 8c2: a6 17 cp r26, r22 + 8c4: b7 07 cpc r27, r23 + 8c6: 10 f0 brcs .+4 ; 0x8cc <__udivmodhi4_ep> + 8c8: a6 1b sub r26, r22 + 8ca: b7 0b sbc r27, r23 + +000008cc <__udivmodhi4_ep>: + 8cc: 88 1f adc r24, r24 + 8ce: 99 1f adc r25, r25 + 8d0: 5a 95 dec r21 + 8d2: a9 f7 brne .-22 ; 0x8be <__udivmodhi4_loop> + 8d4: 80 95 com r24 + 8d6: 90 95 com r25 + 8d8: bc 01 movw r22, r24 + 8da: cd 01 movw r24, r26 + 8dc: 08 95 ret + +000008de : + 8de: a0 e0 ldi r26, 0x00 ; 0 + 8e0: b0 e0 ldi r27, 0x00 ; 0 + 8e2: e5 e7 ldi r30, 0x75 ; 117 + 8e4: f4 e0 ldi r31, 0x04 ; 4 + 8e6: 0c 94 14 07 jmp 0xe28 ; 0xe28 <__prologue_saves__+0x20> + 8ea: fe 01 movw r30, r28 + 8ec: 35 96 adiw r30, 0x05 ; 5 + 8ee: 61 91 ld r22, Z+ + 8f0: 71 91 ld r23, Z+ + 8f2: 80 91 a2 03 lds r24, 0x03A2 + 8f6: 90 91 a3 03 lds r25, 0x03A3 + 8fa: af 01 movw r20, r30 + 8fc: 0e 94 84 04 call 0x908 ; 0x908 + 900: 20 96 adiw r28, 0x00 ; 0 + 902: e2 e0 ldi r30, 0x02 ; 2 + 904: 0c 94 30 07 jmp 0xe60 ; 0xe60 <__epilogue_restores__+0x20> + +00000908 : + 908: ad e0 ldi r26, 0x0D ; 13 + 90a: b0 e0 ldi r27, 0x00 ; 0 + 90c: ea e8 ldi r30, 0x8A ; 138 + 90e: f4 e0 ldi r31, 0x04 ; 4 + 910: 0c 94 04 07 jmp 0xe08 ; 0xe08 <__prologue_saves__> + 914: 3c 01 movw r6, r24 + 916: 7d 87 std Y+13, r23 ; 0x0d + 918: 6c 87 std Y+12, r22 ; 0x0c + 91a: 5a 01 movw r10, r20 + 91c: fc 01 movw r30, r24 + 91e: 17 82 std Z+7, r1 ; 0x07 + 920: 16 82 std Z+6, r1 ; 0x06 + 922: 83 81 ldd r24, Z+3 ; 0x03 + 924: 81 ff sbrs r24, 1 + 926: ca c1 rjmp .+916 ; 0xcbc + 928: 3f e3 ldi r19, 0x3F ; 63 + 92a: c3 2e mov r12, r19 + 92c: 2e 01 movw r4, r28 + 92e: 08 94 sec + 930: 41 1c adc r4, r1 + 932: 51 1c adc r5, r1 + 934: f3 01 movw r30, r6 + 936: 93 81 ldd r25, Z+3 ; 0x03 + 938: ec 85 ldd r30, Y+12 ; 0x0c + 93a: fd 85 ldd r31, Y+13 ; 0x0d + 93c: 93 fd sbrc r25, 3 + 93e: 85 91 lpm r24, Z+ + 940: 93 ff sbrs r25, 3 + 942: 81 91 ld r24, Z+ + 944: fd 87 std Y+13, r31 ; 0x0d + 946: ec 87 std Y+12, r30 ; 0x0c + 948: 88 23 and r24, r24 + 94a: 09 f4 brne .+2 ; 0x94e + 94c: b3 c1 rjmp .+870 ; 0xcb4 + 94e: 85 32 cpi r24, 0x25 ; 37 + 950: 41 f4 brne .+16 ; 0x962 + 952: 93 fd sbrc r25, 3 + 954: 85 91 lpm r24, Z+ + 956: 93 ff sbrs r25, 3 + 958: 81 91 ld r24, Z+ + 95a: fd 87 std Y+13, r31 ; 0x0d + 95c: ec 87 std Y+12, r30 ; 0x0c + 95e: 85 32 cpi r24, 0x25 ; 37 + 960: 29 f4 brne .+10 ; 0x96c + 962: 90 e0 ldi r25, 0x00 ; 0 + 964: b3 01 movw r22, r6 + 966: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + 96a: e4 cf rjmp .-56 ; 0x934 + 96c: ee 24 eor r14, r14 + 96e: dd 24 eor r13, r13 + 970: 10 e0 ldi r17, 0x00 ; 0 + 972: 10 32 cpi r17, 0x20 ; 32 + 974: b0 f4 brcc .+44 ; 0x9a2 + 976: 8b 32 cpi r24, 0x2B ; 43 + 978: 69 f0 breq .+26 ; 0x994 + 97a: 8c 32 cpi r24, 0x2C ; 44 + 97c: 28 f4 brcc .+10 ; 0x988 + 97e: 80 32 cpi r24, 0x20 ; 32 + 980: 51 f0 breq .+20 ; 0x996 + 982: 83 32 cpi r24, 0x23 ; 35 + 984: 71 f4 brne .+28 ; 0x9a2 + 986: 0b c0 rjmp .+22 ; 0x99e + 988: 8d 32 cpi r24, 0x2D ; 45 + 98a: 39 f0 breq .+14 ; 0x99a + 98c: 80 33 cpi r24, 0x30 ; 48 + 98e: 49 f4 brne .+18 ; 0x9a2 + 990: 11 60 ori r17, 0x01 ; 1 + 992: 2c c0 rjmp .+88 ; 0x9ec + 994: 12 60 ori r17, 0x02 ; 2 + 996: 14 60 ori r17, 0x04 ; 4 + 998: 29 c0 rjmp .+82 ; 0x9ec + 99a: 18 60 ori r17, 0x08 ; 8 + 99c: 27 c0 rjmp .+78 ; 0x9ec + 99e: 10 61 ori r17, 0x10 ; 16 + 9a0: 25 c0 rjmp .+74 ; 0x9ec + 9a2: 17 fd sbrc r17, 7 + 9a4: 2e c0 rjmp .+92 ; 0xa02 + 9a6: 28 2f mov r18, r24 + 9a8: 20 53 subi r18, 0x30 ; 48 + 9aa: 2a 30 cpi r18, 0x0A ; 10 + 9ac: 98 f4 brcc .+38 ; 0x9d4 + 9ae: 16 ff sbrs r17, 6 + 9b0: 08 c0 rjmp .+16 ; 0x9c2 + 9b2: 8e 2d mov r24, r14 + 9b4: 88 0f add r24, r24 + 9b6: e8 2e mov r14, r24 + 9b8: ee 0c add r14, r14 + 9ba: ee 0c add r14, r14 + 9bc: e8 0e add r14, r24 + 9be: e2 0e add r14, r18 + 9c0: 15 c0 rjmp .+42 ; 0x9ec + 9c2: 8d 2d mov r24, r13 + 9c4: 88 0f add r24, r24 + 9c6: d8 2e mov r13, r24 + 9c8: dd 0c add r13, r13 + 9ca: dd 0c add r13, r13 + 9cc: d8 0e add r13, r24 + 9ce: d2 0e add r13, r18 + 9d0: 10 62 ori r17, 0x20 ; 32 + 9d2: 0c c0 rjmp .+24 ; 0x9ec + 9d4: 8e 32 cpi r24, 0x2E ; 46 + 9d6: 21 f4 brne .+8 ; 0x9e0 + 9d8: 16 fd sbrc r17, 6 + 9da: 6c c1 rjmp .+728 ; 0xcb4 + 9dc: 10 64 ori r17, 0x40 ; 64 + 9de: 06 c0 rjmp .+12 ; 0x9ec + 9e0: 8c 36 cpi r24, 0x6C ; 108 + 9e2: 11 f4 brne .+4 ; 0x9e8 + 9e4: 10 68 ori r17, 0x80 ; 128 + 9e6: 02 c0 rjmp .+4 ; 0x9ec + 9e8: 88 36 cpi r24, 0x68 ; 104 + 9ea: 59 f4 brne .+22 ; 0xa02 + 9ec: ec 85 ldd r30, Y+12 ; 0x0c + 9ee: fd 85 ldd r31, Y+13 ; 0x0d + 9f0: 93 fd sbrc r25, 3 + 9f2: 85 91 lpm r24, Z+ + 9f4: 93 ff sbrs r25, 3 + 9f6: 81 91 ld r24, Z+ + 9f8: fd 87 std Y+13, r31 ; 0x0d + 9fa: ec 87 std Y+12, r30 ; 0x0c + 9fc: 88 23 and r24, r24 + 9fe: 09 f0 breq .+2 ; 0xa02 + a00: b8 cf rjmp .-144 ; 0x972 + a02: 98 2f mov r25, r24 + a04: 95 54 subi r25, 0x45 ; 69 + a06: 93 30 cpi r25, 0x03 ; 3 + a08: 18 f0 brcs .+6 ; 0xa10 + a0a: 90 52 subi r25, 0x20 ; 32 + a0c: 93 30 cpi r25, 0x03 ; 3 + a0e: 30 f4 brcc .+12 ; 0xa1c + a10: 24 e0 ldi r18, 0x04 ; 4 + a12: 30 e0 ldi r19, 0x00 ; 0 + a14: a2 0e add r10, r18 + a16: b3 1e adc r11, r19 + a18: c9 82 std Y+1, r12 ; 0x01 + a1a: 0f c0 rjmp .+30 ; 0xa3a + a1c: 83 36 cpi r24, 0x63 ; 99 + a1e: 31 f0 breq .+12 ; 0xa2c + a20: 83 37 cpi r24, 0x73 ; 115 + a22: 81 f0 breq .+32 ; 0xa44 + a24: 83 35 cpi r24, 0x53 ; 83 + a26: 09 f0 breq .+2 ; 0xa2a + a28: 5a c0 rjmp .+180 ; 0xade + a2a: 22 c0 rjmp .+68 ; 0xa70 + a2c: f5 01 movw r30, r10 + a2e: 80 81 ld r24, Z + a30: 89 83 std Y+1, r24 ; 0x01 + a32: 22 e0 ldi r18, 0x02 ; 2 + a34: 30 e0 ldi r19, 0x00 ; 0 + a36: a2 0e add r10, r18 + a38: b3 1e adc r11, r19 + a3a: 21 e0 ldi r18, 0x01 ; 1 + a3c: e2 2e mov r14, r18 + a3e: f1 2c mov r15, r1 + a40: 42 01 movw r8, r4 + a42: 14 c0 rjmp .+40 ; 0xa6c + a44: 92 e0 ldi r25, 0x02 ; 2 + a46: 29 2e mov r2, r25 + a48: 31 2c mov r3, r1 + a4a: 2a 0c add r2, r10 + a4c: 3b 1c adc r3, r11 + a4e: f5 01 movw r30, r10 + a50: 80 80 ld r8, Z + a52: 91 80 ldd r9, Z+1 ; 0x01 + a54: 16 ff sbrs r17, 6 + a56: 03 c0 rjmp .+6 ; 0xa5e + a58: 6e 2d mov r22, r14 + a5a: 70 e0 ldi r23, 0x00 ; 0 + a5c: 02 c0 rjmp .+4 ; 0xa62 + a5e: 6f ef ldi r22, 0xFF ; 255 + a60: 7f ef ldi r23, 0xFF ; 255 + a62: c4 01 movw r24, r8 + a64: 0e 94 6f 06 call 0xcde ; 0xcde + a68: 7c 01 movw r14, r24 + a6a: 51 01 movw r10, r2 + a6c: 1f 77 andi r17, 0x7F ; 127 + a6e: 15 c0 rjmp .+42 ; 0xa9a + a70: 82 e0 ldi r24, 0x02 ; 2 + a72: 28 2e mov r2, r24 + a74: 31 2c mov r3, r1 + a76: 2a 0c add r2, r10 + a78: 3b 1c adc r3, r11 + a7a: f5 01 movw r30, r10 + a7c: 80 80 ld r8, Z + a7e: 91 80 ldd r9, Z+1 ; 0x01 + a80: 16 ff sbrs r17, 6 + a82: 03 c0 rjmp .+6 ; 0xa8a + a84: 6e 2d mov r22, r14 + a86: 70 e0 ldi r23, 0x00 ; 0 + a88: 02 c0 rjmp .+4 ; 0xa8e + a8a: 6f ef ldi r22, 0xFF ; 255 + a8c: 7f ef ldi r23, 0xFF ; 255 + a8e: c4 01 movw r24, r8 + a90: 0e 94 64 06 call 0xcc8 ; 0xcc8 + a94: 7c 01 movw r14, r24 + a96: 10 68 ori r17, 0x80 ; 128 + a98: 51 01 movw r10, r2 + a9a: 13 fd sbrc r17, 3 + a9c: 1c c0 rjmp .+56 ; 0xad6 + a9e: 06 c0 rjmp .+12 ; 0xaac + aa0: 80 e2 ldi r24, 0x20 ; 32 + aa2: 90 e0 ldi r25, 0x00 ; 0 + aa4: b3 01 movw r22, r6 + aa6: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + aaa: da 94 dec r13 + aac: 8d 2d mov r24, r13 + aae: 90 e0 ldi r25, 0x00 ; 0 + ab0: e8 16 cp r14, r24 + ab2: f9 06 cpc r15, r25 + ab4: a8 f3 brcs .-22 ; 0xaa0 + ab6: 0f c0 rjmp .+30 ; 0xad6 + ab8: f4 01 movw r30, r8 + aba: 17 fd sbrc r17, 7 + abc: 85 91 lpm r24, Z+ + abe: 17 ff sbrs r17, 7 + ac0: 81 91 ld r24, Z+ + ac2: 4f 01 movw r8, r30 + ac4: 90 e0 ldi r25, 0x00 ; 0 + ac6: b3 01 movw r22, r6 + ac8: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + acc: d1 10 cpse r13, r1 + ace: da 94 dec r13 + ad0: 08 94 sec + ad2: e1 08 sbc r14, r1 + ad4: f1 08 sbc r15, r1 + ad6: e1 14 cp r14, r1 + ad8: f1 04 cpc r15, r1 + ada: 71 f7 brne .-36 ; 0xab8 + adc: e8 c0 rjmp .+464 ; 0xcae + ade: 84 36 cpi r24, 0x64 ; 100 + ae0: 11 f0 breq .+4 ; 0xae6 + ae2: 89 36 cpi r24, 0x69 ; 105 + ae4: 59 f5 brne .+86 ; 0xb3c + ae6: f5 01 movw r30, r10 + ae8: 17 ff sbrs r17, 7 + aea: 07 c0 rjmp .+14 ; 0xafa + aec: 80 81 ld r24, Z + aee: 91 81 ldd r25, Z+1 ; 0x01 + af0: a2 81 ldd r26, Z+2 ; 0x02 + af2: b3 81 ldd r27, Z+3 ; 0x03 + af4: 24 e0 ldi r18, 0x04 ; 4 + af6: 30 e0 ldi r19, 0x00 ; 0 + af8: 09 c0 rjmp .+18 ; 0xb0c + afa: 60 81 ld r22, Z + afc: 71 81 ldd r23, Z+1 ; 0x01 + afe: cb 01 movw r24, r22 + b00: aa 27 eor r26, r26 + b02: 97 fd sbrc r25, 7 + b04: a0 95 com r26 + b06: ba 2f mov r27, r26 + b08: 22 e0 ldi r18, 0x02 ; 2 + b0a: 30 e0 ldi r19, 0x00 ; 0 + b0c: a2 0e add r10, r18 + b0e: b3 1e adc r11, r19 + b10: 01 2f mov r16, r17 + b12: 0f 76 andi r16, 0x6F ; 111 + b14: b7 ff sbrs r27, 7 + b16: 08 c0 rjmp .+16 ; 0xb28 + b18: b0 95 com r27 + b1a: a0 95 com r26 + b1c: 90 95 com r25 + b1e: 81 95 neg r24 + b20: 9f 4f sbci r25, 0xFF ; 255 + b22: af 4f sbci r26, 0xFF ; 255 + b24: bf 4f sbci r27, 0xFF ; 255 + b26: 00 68 ori r16, 0x80 ; 128 + b28: bc 01 movw r22, r24 + b2a: cd 01 movw r24, r26 + b2c: a2 01 movw r20, r4 + b2e: 2a e0 ldi r18, 0x0A ; 10 + b30: 30 e0 ldi r19, 0x00 ; 0 + b32: 0e 94 a6 06 call 0xd4c ; 0xd4c <__ultoa_invert> + b36: f8 2e mov r15, r24 + b38: f4 18 sub r15, r4 + b3a: 3f c0 rjmp .+126 ; 0xbba + b3c: 85 37 cpi r24, 0x75 ; 117 + b3e: 21 f4 brne .+8 ; 0xb48 + b40: 1f 7e andi r17, 0xEF ; 239 + b42: 2a e0 ldi r18, 0x0A ; 10 + b44: 30 e0 ldi r19, 0x00 ; 0 + b46: 20 c0 rjmp .+64 ; 0xb88 + b48: 19 7f andi r17, 0xF9 ; 249 + b4a: 8f 36 cpi r24, 0x6F ; 111 + b4c: a9 f0 breq .+42 ; 0xb78 + b4e: 80 37 cpi r24, 0x70 ; 112 + b50: 20 f4 brcc .+8 ; 0xb5a + b52: 88 35 cpi r24, 0x58 ; 88 + b54: 09 f0 breq .+2 ; 0xb58 + b56: ae c0 rjmp .+348 ; 0xcb4 + b58: 0b c0 rjmp .+22 ; 0xb70 + b5a: 80 37 cpi r24, 0x70 ; 112 + b5c: 21 f0 breq .+8 ; 0xb66 + b5e: 88 37 cpi r24, 0x78 ; 120 + b60: 09 f0 breq .+2 ; 0xb64 + b62: a8 c0 rjmp .+336 ; 0xcb4 + b64: 01 c0 rjmp .+2 ; 0xb68 + b66: 10 61 ori r17, 0x10 ; 16 + b68: 14 ff sbrs r17, 4 + b6a: 09 c0 rjmp .+18 ; 0xb7e + b6c: 14 60 ori r17, 0x04 ; 4 + b6e: 07 c0 rjmp .+14 ; 0xb7e + b70: 14 ff sbrs r17, 4 + b72: 08 c0 rjmp .+16 ; 0xb84 + b74: 16 60 ori r17, 0x06 ; 6 + b76: 06 c0 rjmp .+12 ; 0xb84 + b78: 28 e0 ldi r18, 0x08 ; 8 + b7a: 30 e0 ldi r19, 0x00 ; 0 + b7c: 05 c0 rjmp .+10 ; 0xb88 + b7e: 20 e1 ldi r18, 0x10 ; 16 + b80: 30 e0 ldi r19, 0x00 ; 0 + b82: 02 c0 rjmp .+4 ; 0xb88 + b84: 20 e1 ldi r18, 0x10 ; 16 + b86: 32 e0 ldi r19, 0x02 ; 2 + b88: f5 01 movw r30, r10 + b8a: 17 ff sbrs r17, 7 + b8c: 07 c0 rjmp .+14 ; 0xb9c + b8e: 60 81 ld r22, Z + b90: 71 81 ldd r23, Z+1 ; 0x01 + b92: 82 81 ldd r24, Z+2 ; 0x02 + b94: 93 81 ldd r25, Z+3 ; 0x03 + b96: 44 e0 ldi r20, 0x04 ; 4 + b98: 50 e0 ldi r21, 0x00 ; 0 + b9a: 06 c0 rjmp .+12 ; 0xba8 + b9c: 60 81 ld r22, Z + b9e: 71 81 ldd r23, Z+1 ; 0x01 + ba0: 80 e0 ldi r24, 0x00 ; 0 + ba2: 90 e0 ldi r25, 0x00 ; 0 + ba4: 42 e0 ldi r20, 0x02 ; 2 + ba6: 50 e0 ldi r21, 0x00 ; 0 + ba8: a4 0e add r10, r20 + baa: b5 1e adc r11, r21 + bac: a2 01 movw r20, r4 + bae: 0e 94 a6 06 call 0xd4c ; 0xd4c <__ultoa_invert> + bb2: f8 2e mov r15, r24 + bb4: f4 18 sub r15, r4 + bb6: 01 2f mov r16, r17 + bb8: 0f 77 andi r16, 0x7F ; 127 + bba: 06 ff sbrs r16, 6 + bbc: 09 c0 rjmp .+18 ; 0xbd0 + bbe: 0e 7f andi r16, 0xFE ; 254 + bc0: fe 14 cp r15, r14 + bc2: 30 f4 brcc .+12 ; 0xbd0 + bc4: 04 ff sbrs r16, 4 + bc6: 06 c0 rjmp .+12 ; 0xbd4 + bc8: 02 fd sbrc r16, 2 + bca: 04 c0 rjmp .+8 ; 0xbd4 + bcc: 0f 7e andi r16, 0xEF ; 239 + bce: 02 c0 rjmp .+4 ; 0xbd4 + bd0: 1f 2d mov r17, r15 + bd2: 01 c0 rjmp .+2 ; 0xbd6 + bd4: 1e 2d mov r17, r14 + bd6: 80 2f mov r24, r16 + bd8: 90 e0 ldi r25, 0x00 ; 0 + bda: 04 ff sbrs r16, 4 + bdc: 0c c0 rjmp .+24 ; 0xbf6 + bde: fe 01 movw r30, r28 + be0: ef 0d add r30, r15 + be2: f1 1d adc r31, r1 + be4: 20 81 ld r18, Z + be6: 20 33 cpi r18, 0x30 ; 48 + be8: 11 f4 brne .+4 ; 0xbee + bea: 09 7e andi r16, 0xE9 ; 233 + bec: 09 c0 rjmp .+18 ; 0xc00 + bee: 02 ff sbrs r16, 2 + bf0: 06 c0 rjmp .+12 ; 0xbfe + bf2: 1e 5f subi r17, 0xFE ; 254 + bf4: 05 c0 rjmp .+10 ; 0xc00 + bf6: 86 78 andi r24, 0x86 ; 134 + bf8: 90 70 andi r25, 0x00 ; 0 + bfa: 00 97 sbiw r24, 0x00 ; 0 + bfc: 09 f0 breq .+2 ; 0xc00 + bfe: 1f 5f subi r17, 0xFF ; 255 + c00: 80 2e mov r8, r16 + c02: 99 24 eor r9, r9 + c04: 03 fd sbrc r16, 3 + c06: 12 c0 rjmp .+36 ; 0xc2c + c08: 00 ff sbrs r16, 0 + c0a: 0d c0 rjmp .+26 ; 0xc26 + c0c: ef 2c mov r14, r15 + c0e: 1d 15 cp r17, r13 + c10: 50 f4 brcc .+20 ; 0xc26 + c12: ed 0c add r14, r13 + c14: e1 1a sub r14, r17 + c16: 1d 2d mov r17, r13 + c18: 06 c0 rjmp .+12 ; 0xc26 + c1a: 80 e2 ldi r24, 0x20 ; 32 + c1c: 90 e0 ldi r25, 0x00 ; 0 + c1e: b3 01 movw r22, r6 + c20: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + c24: 1f 5f subi r17, 0xFF ; 255 + c26: 1d 15 cp r17, r13 + c28: c0 f3 brcs .-16 ; 0xc1a + c2a: 04 c0 rjmp .+8 ; 0xc34 + c2c: 1d 15 cp r17, r13 + c2e: 10 f4 brcc .+4 ; 0xc34 + c30: d1 1a sub r13, r17 + c32: 01 c0 rjmp .+2 ; 0xc36 + c34: dd 24 eor r13, r13 + c36: 84 fe sbrs r8, 4 + c38: 0f c0 rjmp .+30 ; 0xc58 + c3a: 80 e3 ldi r24, 0x30 ; 48 + c3c: 90 e0 ldi r25, 0x00 ; 0 + c3e: b3 01 movw r22, r6 + c40: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + c44: 82 fe sbrs r8, 2 + c46: 1f c0 rjmp .+62 ; 0xc86 + c48: 81 fe sbrs r8, 1 + c4a: 03 c0 rjmp .+6 ; 0xc52 + c4c: 88 e5 ldi r24, 0x58 ; 88 + c4e: 90 e0 ldi r25, 0x00 ; 0 + c50: 10 c0 rjmp .+32 ; 0xc72 + c52: 88 e7 ldi r24, 0x78 ; 120 + c54: 90 e0 ldi r25, 0x00 ; 0 + c56: 0d c0 rjmp .+26 ; 0xc72 + c58: c4 01 movw r24, r8 + c5a: 86 78 andi r24, 0x86 ; 134 + c5c: 90 70 andi r25, 0x00 ; 0 + c5e: 00 97 sbiw r24, 0x00 ; 0 + c60: 91 f0 breq .+36 ; 0xc86 + c62: 81 fc sbrc r8, 1 + c64: 02 c0 rjmp .+4 ; 0xc6a + c66: 80 e2 ldi r24, 0x20 ; 32 + c68: 01 c0 rjmp .+2 ; 0xc6c + c6a: 8b e2 ldi r24, 0x2B ; 43 + c6c: 07 fd sbrc r16, 7 + c6e: 8d e2 ldi r24, 0x2D ; 45 + c70: 90 e0 ldi r25, 0x00 ; 0 + c72: b3 01 movw r22, r6 + c74: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + c78: 06 c0 rjmp .+12 ; 0xc86 + c7a: 80 e3 ldi r24, 0x30 ; 48 + c7c: 90 e0 ldi r25, 0x00 ; 0 + c7e: b3 01 movw r22, r6 + c80: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + c84: ea 94 dec r14 + c86: fe 14 cp r15, r14 + c88: c0 f3 brcs .-16 ; 0xc7a + c8a: fa 94 dec r15 + c8c: f2 01 movw r30, r4 + c8e: ef 0d add r30, r15 + c90: f1 1d adc r31, r1 + c92: 80 81 ld r24, Z + c94: 90 e0 ldi r25, 0x00 ; 0 + c96: b3 01 movw r22, r6 + c98: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + c9c: ff 20 and r15, r15 + c9e: a9 f7 brne .-22 ; 0xc8a + ca0: 06 c0 rjmp .+12 ; 0xcae + ca2: 80 e2 ldi r24, 0x20 ; 32 + ca4: 90 e0 ldi r25, 0x00 ; 0 + ca6: b3 01 movw r22, r6 + ca8: 0e 94 7a 06 call 0xcf4 ; 0xcf4 + cac: da 94 dec r13 + cae: dd 20 and r13, r13 + cb0: c1 f7 brne .-16 ; 0xca2 + cb2: 40 ce rjmp .-896 ; 0x934 + cb4: f3 01 movw r30, r6 + cb6: 86 81 ldd r24, Z+6 ; 0x06 + cb8: 97 81 ldd r25, Z+7 ; 0x07 + cba: 02 c0 rjmp .+4 ; 0xcc0 + cbc: 8f ef ldi r24, 0xFF ; 255 + cbe: 9f ef ldi r25, 0xFF ; 255 + cc0: 2d 96 adiw r28, 0x0d ; 13 + cc2: e2 e1 ldi r30, 0x12 ; 18 + cc4: 0c 94 20 07 jmp 0xe40 ; 0xe40 <__epilogue_restores__> + +00000cc8 : + cc8: fc 01 movw r30, r24 + cca: 05 90 lpm r0, Z+ + ccc: 61 50 subi r22, 0x01 ; 1 + cce: 70 40 sbci r23, 0x00 ; 0 + cd0: 01 10 cpse r0, r1 + cd2: d8 f7 brcc .-10 ; 0xcca + cd4: 80 95 com r24 + cd6: 90 95 com r25 + cd8: 8e 0f add r24, r30 + cda: 9f 1f adc r25, r31 + cdc: 08 95 ret + +00000cde : + cde: fc 01 movw r30, r24 + ce0: 61 50 subi r22, 0x01 ; 1 + ce2: 70 40 sbci r23, 0x00 ; 0 + ce4: 01 90 ld r0, Z+ + ce6: 01 10 cpse r0, r1 + ce8: d8 f7 brcc .-10 ; 0xce0 + cea: 80 95 com r24 + cec: 90 95 com r25 + cee: 8e 0f add r24, r30 + cf0: 9f 1f adc r25, r31 + cf2: 08 95 ret + +00000cf4 : + cf4: 0f 93 push r16 + cf6: 1f 93 push r17 + cf8: cf 93 push r28 + cfa: df 93 push r29 + cfc: 8c 01 movw r16, r24 + cfe: eb 01 movw r28, r22 + d00: 8b 81 ldd r24, Y+3 ; 0x03 + d02: 81 ff sbrs r24, 1 + d04: 1b c0 rjmp .+54 ; 0xd3c + d06: 82 ff sbrs r24, 2 + d08: 0d c0 rjmp .+26 ; 0xd24 + d0a: 2e 81 ldd r18, Y+6 ; 0x06 + d0c: 3f 81 ldd r19, Y+7 ; 0x07 + d0e: 8c 81 ldd r24, Y+4 ; 0x04 + d10: 9d 81 ldd r25, Y+5 ; 0x05 + d12: 28 17 cp r18, r24 + d14: 39 07 cpc r19, r25 + d16: 64 f4 brge .+24 ; 0xd30 + d18: e8 81 ld r30, Y + d1a: f9 81 ldd r31, Y+1 ; 0x01 + d1c: 01 93 st Z+, r16 + d1e: f9 83 std Y+1, r31 ; 0x01 + d20: e8 83 st Y, r30 + d22: 06 c0 rjmp .+12 ; 0xd30 + d24: e8 85 ldd r30, Y+8 ; 0x08 + d26: f9 85 ldd r31, Y+9 ; 0x09 + d28: 80 2f mov r24, r16 + d2a: 09 95 icall + d2c: 00 97 sbiw r24, 0x00 ; 0 + d2e: 31 f4 brne .+12 ; 0xd3c + d30: 8e 81 ldd r24, Y+6 ; 0x06 + d32: 9f 81 ldd r25, Y+7 ; 0x07 + d34: 01 96 adiw r24, 0x01 ; 1 + d36: 9f 83 std Y+7, r25 ; 0x07 + d38: 8e 83 std Y+6, r24 ; 0x06 + d3a: 02 c0 rjmp .+4 ; 0xd40 + d3c: 0f ef ldi r16, 0xFF ; 255 + d3e: 1f ef ldi r17, 0xFF ; 255 + d40: c8 01 movw r24, r16 + d42: df 91 pop r29 + d44: cf 91 pop r28 + d46: 1f 91 pop r17 + d48: 0f 91 pop r16 + d4a: 08 95 ret + +00000d4c <__ultoa_invert>: + d4c: fa 01 movw r30, r20 + d4e: aa 27 eor r26, r26 + d50: 28 30 cpi r18, 0x08 ; 8 + d52: 51 f1 breq .+84 ; 0xda8 <__ultoa_invert+0x5c> + d54: 20 31 cpi r18, 0x10 ; 16 + d56: 81 f1 breq .+96 ; 0xdb8 <__ultoa_invert+0x6c> + d58: e8 94 clt + d5a: 6f 93 push r22 + d5c: 6e 7f andi r22, 0xFE ; 254 + d5e: 6e 5f subi r22, 0xFE ; 254 + d60: 7f 4f sbci r23, 0xFF ; 255 + d62: 8f 4f sbci r24, 0xFF ; 255 + d64: 9f 4f sbci r25, 0xFF ; 255 + d66: af 4f sbci r26, 0xFF ; 255 + d68: b1 e0 ldi r27, 0x01 ; 1 + d6a: 3e d0 rcall .+124 ; 0xde8 <__ultoa_invert+0x9c> + d6c: b4 e0 ldi r27, 0x04 ; 4 + d6e: 3c d0 rcall .+120 ; 0xde8 <__ultoa_invert+0x9c> + d70: 67 0f add r22, r23 + d72: 78 1f adc r23, r24 + d74: 89 1f adc r24, r25 + d76: 9a 1f adc r25, r26 + d78: a1 1d adc r26, r1 + d7a: 68 0f add r22, r24 + d7c: 79 1f adc r23, r25 + d7e: 8a 1f adc r24, r26 + d80: 91 1d adc r25, r1 + d82: a1 1d adc r26, r1 + d84: 6a 0f add r22, r26 + d86: 71 1d adc r23, r1 + d88: 81 1d adc r24, r1 + d8a: 91 1d adc r25, r1 + d8c: a1 1d adc r26, r1 + d8e: 20 d0 rcall .+64 ; 0xdd0 <__ultoa_invert+0x84> + d90: 09 f4 brne .+2 ; 0xd94 <__ultoa_invert+0x48> + d92: 68 94 set + d94: 3f 91 pop r19 + d96: 2a e0 ldi r18, 0x0A ; 10 + d98: 26 9f mul r18, r22 + d9a: 11 24 eor r1, r1 + d9c: 30 19 sub r19, r0 + d9e: 30 5d subi r19, 0xD0 ; 208 + da0: 31 93 st Z+, r19 + da2: de f6 brtc .-74 ; 0xd5a <__ultoa_invert+0xe> + da4: cf 01 movw r24, r30 + da6: 08 95 ret + da8: 46 2f mov r20, r22 + daa: 47 70 andi r20, 0x07 ; 7 + dac: 40 5d subi r20, 0xD0 ; 208 + dae: 41 93 st Z+, r20 + db0: b3 e0 ldi r27, 0x03 ; 3 + db2: 0f d0 rcall .+30 ; 0xdd2 <__ultoa_invert+0x86> + db4: c9 f7 brne .-14 ; 0xda8 <__ultoa_invert+0x5c> + db6: f6 cf rjmp .-20 ; 0xda4 <__ultoa_invert+0x58> + db8: 46 2f mov r20, r22 + dba: 4f 70 andi r20, 0x0F ; 15 + dbc: 40 5d subi r20, 0xD0 ; 208 + dbe: 4a 33 cpi r20, 0x3A ; 58 + dc0: 18 f0 brcs .+6 ; 0xdc8 <__ultoa_invert+0x7c> + dc2: 49 5d subi r20, 0xD9 ; 217 + dc4: 31 fd sbrc r19, 1 + dc6: 40 52 subi r20, 0x20 ; 32 + dc8: 41 93 st Z+, r20 + dca: 02 d0 rcall .+4 ; 0xdd0 <__ultoa_invert+0x84> + dcc: a9 f7 brne .-22 ; 0xdb8 <__ultoa_invert+0x6c> + dce: ea cf rjmp .-44 ; 0xda4 <__ultoa_invert+0x58> + dd0: b4 e0 ldi r27, 0x04 ; 4 + dd2: a6 95 lsr r26 + dd4: 97 95 ror r25 + dd6: 87 95 ror r24 + dd8: 77 95 ror r23 + dda: 67 95 ror r22 + ddc: ba 95 dec r27 + dde: c9 f7 brne .-14 ; 0xdd2 <__ultoa_invert+0x86> + de0: 00 97 sbiw r24, 0x00 ; 0 + de2: 61 05 cpc r22, r1 + de4: 71 05 cpc r23, r1 + de6: 08 95 ret + de8: 9b 01 movw r18, r22 + dea: ac 01 movw r20, r24 + dec: 0a 2e mov r0, r26 + dee: 06 94 lsr r0 + df0: 57 95 ror r21 + df2: 47 95 ror r20 + df4: 37 95 ror r19 + df6: 27 95 ror r18 + df8: ba 95 dec r27 + dfa: c9 f7 brne .-14 ; 0xdee <__ultoa_invert+0xa2> + dfc: 62 0f add r22, r18 + dfe: 73 1f adc r23, r19 + e00: 84 1f adc r24, r20 + e02: 95 1f adc r25, r21 + e04: a0 1d adc r26, r0 + e06: 08 95 ret + +00000e08 <__prologue_saves__>: + e08: 2f 92 push r2 + e0a: 3f 92 push r3 + e0c: 4f 92 push r4 + e0e: 5f 92 push r5 + e10: 6f 92 push r6 + e12: 7f 92 push r7 + e14: 8f 92 push r8 + e16: 9f 92 push r9 + e18: af 92 push r10 + e1a: bf 92 push r11 + e1c: cf 92 push r12 + e1e: df 92 push r13 + e20: ef 92 push r14 + e22: ff 92 push r15 + e24: 0f 93 push r16 + e26: 1f 93 push r17 + e28: cf 93 push r28 + e2a: df 93 push r29 + e2c: cd b7 in r28, 0x3d ; 61 + e2e: de b7 in r29, 0x3e ; 62 + e30: ca 1b sub r28, r26 + e32: db 0b sbc r29, r27 + e34: 0f b6 in r0, 0x3f ; 63 + e36: f8 94 cli + e38: de bf out 0x3e, r29 ; 62 + e3a: 0f be out 0x3f, r0 ; 63 + e3c: cd bf out 0x3d, r28 ; 61 + e3e: 09 94 ijmp + +00000e40 <__epilogue_restores__>: + e40: 2a 88 ldd r2, Y+18 ; 0x12 + e42: 39 88 ldd r3, Y+17 ; 0x11 + e44: 48 88 ldd r4, Y+16 ; 0x10 + e46: 5f 84 ldd r5, Y+15 ; 0x0f + e48: 6e 84 ldd r6, Y+14 ; 0x0e + e4a: 7d 84 ldd r7, Y+13 ; 0x0d + e4c: 8c 84 ldd r8, Y+12 ; 0x0c + e4e: 9b 84 ldd r9, Y+11 ; 0x0b + e50: aa 84 ldd r10, Y+10 ; 0x0a + e52: b9 84 ldd r11, Y+9 ; 0x09 + e54: c8 84 ldd r12, Y+8 ; 0x08 + e56: df 80 ldd r13, Y+7 ; 0x07 + e58: ee 80 ldd r14, Y+6 ; 0x06 + e5a: fd 80 ldd r15, Y+5 ; 0x05 + e5c: 0c 81 ldd r16, Y+4 ; 0x04 + e5e: 1b 81 ldd r17, Y+3 ; 0x03 + e60: aa 81 ldd r26, Y+2 ; 0x02 + e62: b9 81 ldd r27, Y+1 ; 0x01 + e64: ce 0f add r28, r30 + e66: d1 1d adc r29, r1 + e68: 0f b6 in r0, 0x3f ; 63 + e6a: f8 94 cli + e6c: de bf out 0x3e, r29 ; 62 + e6e: 0f be out 0x3f, r0 ; 63 + e70: cd bf out 0x3d, r28 ; 61 + e72: ed 01 movw r28, r26 + e74: 08 95 ret + +00000e76 <_exit>: + e76: f8 94 cli + +00000e78 <__stop_program>: + e78: ff cf rjmp .-2 ; 0xe78 <__stop_program> diff --git a/button_debounce/main.lst b/button_debounce/main.lst new file mode 100644 index 0000000..b42f0df --- /dev/null +++ b/button_debounce/main.lst @@ -0,0 +1,552 @@ + 1 .file "main.c" + 2 __SREG__ = 0x3f + 3 __SP_H__ = 0x3e + 4 __SP_L__ = 0x3d + 5 __tmp_reg__ = 0 + 6 __zero_reg__ = 1 + 7 .global __do_copy_data + 8 .global __do_clear_bss + 9 .text + 10 .Ltext0: + 11 .global digital_read + 13 digital_read: + 14 .LFB6: + 15 .file 1 "main.c" + 1:main.c **** /* + 2:main.c **** * Button with debouncing. Based on the Arduino example but without + 3:main.c **** * Arduino libraries. + 4:main.c **** * + 5:main.c **** * http://www.arduino.cc/en/Tutorial/Debounce + 6:main.c **** * + 7:main.c **** * To compile and upload run: make clean; make; make program; + 8:main.c **** * + 9:main.c **** * Copyright 2011 Mika Tuupola + 10:main.c **** * + 11:main.c **** * Licensed under the MIT license: + 12:main.c **** * http://www.opensource.org/licenses/mit-license.php + 13:main.c **** * + 14:main.c **** */ + 15:main.c **** + 16:main.c **** + 17:main.c **** #ifndef F_CPU + 18:main.c **** #define F_CPU 16000000UL + 19:main.c **** #endif + 20:main.c **** + 21:main.c **** #include + 22:main.c **** #include + 23:main.c **** #include + 24:main.c **** #include + 25:main.c **** #include + 26:main.c **** #include + 27:main.c **** + 28:main.c **** #include "main.h" + 29:main.c **** #include "uart.h" + 30:main.c **** #include "timer.h" + 31:main.c **** + 32:main.c **** void init(void) { + 33:main.c **** + 34:main.c **** /* Make PORTD2 (Arduino digital 2) input by clearing bit in DDR */ + 35:main.c **** DDRD &= ~(_BV(PORTD2)); + 36:main.c **** + 37:main.c **** /* In input mode, when pull-up is enabled, default state of pin becomes ’1′. So even if */ + 38:main.c **** /* you don’t connect anything to pin and if you try to read it, it will read as 1. Now, */ + 39:main.c **** /* when you externally drive that pin to zero(i.e. connect to ground / or pull-down), */ + 40:main.c **** /* only then it will be read as 0. */ + 41:main.c **** + 42:main.c **** /* Enable pullups by setting bits in PORT. Default state is now high. */ + 43:main.c **** PORTD |= (_BV(PORTD2)); + 44:main.c **** + 45:main.c **** /* Make PORTB5 (Arduino digital 13) an output by setting bit in DDR. */ + 46:main.c **** DDRB |= _BV(PORTB5); + 47:main.c **** + 48:main.c **** } + 49:main.c **** + 50:main.c **** uint8_t digital_read(int input_register, int pin) { + 16 .loc 1 50 0 + 17 .LVL0: + 18 0000 CF93 push r28 + 19 .LCFI0: + 20 0002 DF93 push r29 + 21 .LCFI1: + 22 0004 00D0 rcall . + 23 .LCFI2: + 24 0006 CDB7 in r28,__SP_L__ + 25 0008 DEB7 in r29,__SP_H__ + 26 .LCFI3: + 27 /* prologue: function */ + 28 /* frame size = 2 */ + 29 /* stack size = 4 */ + 30 .L__stack_usage = 4 + 31 000a 9A83 std Y+2,r25 + 32 000c 8983 std Y+1,r24 + 51:main.c **** return bit_is_set(input_register, pin) != 0 ? 1 : 0; + 33 .loc 1 51 0 + 34 000e 8981 ldd r24,Y+1 + 35 .LVL1: + 36 0010 90E0 ldi r25,lo8(0) + 37 0012 00C0 rjmp 2f + 38 0014 9595 1: asr r25 + 39 0016 8795 ror r24 + 40 0018 6A95 2: dec r22 + 41 001a 02F4 brpl 1b + 52:main.c **** } + 42 .loc 1 52 0 + 43 001c 8170 andi r24,lo8(1) + 44 /* epilogue start */ + 45 001e 0F90 pop __tmp_reg__ + 46 0020 0F90 pop __tmp_reg__ + 47 0022 DF91 pop r29 + 48 0024 CF91 pop r28 + 49 0026 0895 ret + 50 .LFE6: + 52 .global digital_write + 54 digital_write: + 55 .LFB7: + 53:main.c **** + 54:main.c **** /* You could use cbi ie &= ~ or sbi ie |= but this makes code more readable. */ + 55:main.c **** void digital_write(volatile uint8_t *data_port, uint8_t pin, uint8_t value) { + 56 .loc 1 55 0 + 57 .LVL2: + 58 /* prologue: function */ + 59 /* frame size = 0 */ + 60 /* stack size = 0 */ + 61 .L__stack_usage = 0 + 62 0028 FC01 movw r30,r24 + 56:main.c **** if (0 == value) { + 57:main.c **** *data_port &= ~(_BV(pin)); + 63 .loc 1 57 0 + 64 002a 2081 ld r18,Z + 65 002c 81E0 ldi r24,lo8(1) + 66 002e 90E0 ldi r25,hi8(1) + 67 .LVL3: + 68 0030 00C0 rjmp 2f + 69 0032 880F 1: lsl r24 + 70 0034 991F rol r25 + 71 0036 6A95 2: dec r22 + 72 0038 02F4 brpl 1b + 56:main.c **** if (0 == value) { + 73 .loc 1 56 0 + 74 003a 4423 tst r20 + 75 003c 01F4 brne .L3 + 76 .loc 1 57 0 + 77 003e 8095 com r24 + 78 0040 8223 and r24,r18 + 79 0042 8083 st Z,r24 + 80 0044 0895 ret + 81 .L3: + 58:main.c **** } else { + 59:main.c **** *data_port |= _BV(pin); + 82 .loc 1 59 0 + 83 0046 282B or r18,r24 + 84 0048 2083 st Z,r18 + 85 004a 0895 ret + 86 .LFE7: + 88 .data + 89 .LC0: + 90 0000 2D20 5265 .string "- Reading toggled %d (%d)\n" + 90 6164 696E + 90 6720 746F + 90 6767 6C65 + 90 6420 2564 + 91 .LC1: + 92 001b 2B20 5374 .string "+ State toggled %d (%d)\n" + 92 6174 6520 + 92 746F 6767 + 92 6C65 6420 + 92 2564 2028 + 93 .section .text.startup,"ax",@progbits + 94 .global main + 96 main: + 97 .LFB8: + 60:main.c **** } + 61:main.c **** } + 62:main.c **** + 63:main.c **** int main(void) { + 98 .loc 1 63 0 + 99 0000 CF93 push r28 + 100 .LCFI4: + 101 0002 DF93 push r29 + 102 .LCFI5: + 103 0004 00D0 rcall . + 104 .LCFI6: + 105 0006 CDB7 in r28,__SP_L__ + 106 0008 DEB7 in r29,__SP_H__ + 107 .LCFI7: + 108 /* prologue: function */ + 109 /* frame size = 2 */ + 110 /* stack size = 4 */ + 111 .L__stack_usage = 4 + 112 .LBB6: + 113 .LBB7: + 35:main.c **** DDRD &= ~(_BV(PORTD2)); + 114 .loc 1 35 0 + 115 000a 5298 cbi 42-0x20,2 + 43:main.c **** PORTD |= (_BV(PORTD2)); + 116 .loc 1 43 0 + 117 000c 5A9A sbi 43-0x20,2 + 46:main.c **** DDRB |= _BV(PORTB5); + 118 .loc 1 46 0 + 119 000e 259A sbi 36-0x20,5 + 120 .LBE7: + 121 .LBE6: + 64:main.c **** + 65:main.c **** init(); + 66:main.c **** timer_init(); + 122 .loc 1 66 0 + 123 0010 0E94 0000 call timer_init + 67:main.c **** uart_init(); + 124 .loc 1 67 0 + 125 0014 0E94 0000 call uart_init + 68:main.c **** stdout = &uart_output; + 126 .loc 1 68 0 + 127 0018 80E0 ldi r24,lo8(uart_output) + 128 001a 90E0 ldi r25,hi8(uart_output) + 129 001c 9093 0000 sts __iob+2+1,r25 + 130 0020 8093 0000 sts __iob+2,r24 + 69:main.c **** stdin = &uart_input; + 131 .loc 1 69 0 + 132 0024 80E0 ldi r24,lo8(uart_input) + 133 0026 90E0 ldi r25,hi8(uart_input) + 134 0028 9093 0000 sts __iob+1,r25 + 135 002c 8093 0000 sts __iob,r24 + 136 .LVL4: + 70:main.c **** + 71:main.c **** uint8_t current_reading; + 72:main.c **** uint8_t previous_reading = 0; + 73:main.c **** uint8_t current_state = 0; + 74:main.c **** uint8_t previous_state = 0; + 137 .loc 1 74 0 + 138 0030 7724 clr r7 + 73:main.c **** uint8_t current_state = 0; + 139 .loc 1 73 0 + 140 0032 00E0 ldi r16,lo8(0) + 72:main.c **** uint8_t previous_reading = 0; + 141 .loc 1 72 0 + 142 0034 20E0 ldi r18,lo8(0) + 75:main.c **** + 76:main.c **** uint64_t last_toggle_time; + 77:main.c **** + 78:main.c **** while (1) { + 79:main.c **** + 80:main.c **** current_reading = digital_read(PIND, PIND2); + 81:main.c **** if (current_reading != previous_reading) { + 82:main.c **** /* Note the time in millis of last change of button state. */ + 83:main.c **** last_toggle_time = timer_millis(); + 84:main.c **** printf("- Reading toggled %d (%d)\n", current_reading, last_toggle_time); + 143 .loc 1 84 0 + 144 0036 40E0 ldi r20,lo8(.LC0) + 145 0038 442E mov r4,r20 + 146 003a 40E0 ldi r20,hi8(.LC0) + 147 003c 542E mov r5,r20 + 85:main.c **** } + 86:main.c **** + 87:main.c **** /* If there has been more than 10 millis since last toggling */ + 88:main.c **** /* of button state, assume it is real and not bouncing noise. */ + 89:main.c **** if ((timer_millis() - last_toggle_time) > 10) { + 90:main.c **** current_state = current_reading; + 91:main.c **** } + 92:main.c **** + 93:main.c **** /* Just for debugging purposes. */ + 94:main.c **** if (current_state != previous_state) { + 95:main.c **** printf("+ State toggled %d (%d)\n", current_state, last_toggle_time); + 148 .loc 1 95 0 + 149 003e 50E0 ldi r21,lo8(.LC1) + 150 0040 252E mov r2,r21 + 151 0042 50E0 ldi r21,hi8(.LC1) + 152 0044 352E mov r3,r21 + 153 0046 00C0 rjmp .L6 + 154 .LVL5: + 155 .L23: + 51:main.c **** return bit_is_set(input_register, pin) != 0 ? 1 : 0; + 156 .loc 1 51 0 + 157 0048 212F mov r18,r17 + 158 .LVL6: + 159 .L6: + 80:main.c **** current_reading = digital_read(PIND, PIND2); + 160 .loc 1 80 0 + 161 004a 89B1 in r24,41-0x20 + 162 004c 8983 std Y+1,r24 + 163 004e 1A82 std Y+2,__zero_reg__ + 164 .LVL7: + 165 .LBB8: + 166 .LBB9: + 51:main.c **** return bit_is_set(input_register, pin) != 0 ? 1 : 0; + 167 .loc 1 51 0 + 168 0050 8981 ldd r24,Y+1 + 169 0052 90E0 ldi r25,lo8(0) + 170 0054 9595 asr r25 + 171 0056 8795 ror r24 + 172 0058 9595 asr r25 + 173 005a 8795 ror r24 + 174 005c 182F mov r17,r24 + 175 005e 1170 andi r17,lo8(1) + 176 .LBE9: + 177 .LBE8: + 81:main.c **** if (current_reading != previous_reading) { + 178 .loc 1 81 0 + 179 0060 1217 cp r17,r18 + 180 0062 01F0 breq .L7 + 83:main.c **** last_toggle_time = timer_millis(); + 181 .loc 1 83 0 + 182 0064 0E94 0000 call timer_millis + 183 .LVL8: + 184 0068 4901 movw r8,r18 + 185 .LVL9: + 186 006a 5A01 movw r10,r20 + 187 006c 6B01 movw r12,r22 + 188 006e 7C01 movw r14,r24 + 189 .LVL10: + 84:main.c **** printf("- Reading toggled %d (%d)\n", current_reading, last_toggle_time); + 190 .loc 1 84 0 + 191 0070 8DB7 in r24,__SP_L__ + 192 0072 9EB7 in r25,__SP_H__ + 193 0074 0C97 sbiw r24,12 + 194 0076 0FB6 in __tmp_reg__,__SREG__ + 195 0078 F894 cli + 196 007a 9EBF out __SP_H__,r25 + 197 007c 0FBE out __SREG__,__tmp_reg__ + 198 007e 8DBF out __SP_L__,r24 + 199 0080 EDB7 in r30,__SP_L__ + 200 0082 FEB7 in r31,__SP_H__ + 201 0084 3196 adiw r30,1 + 202 0086 ADB7 in r26,__SP_L__ + 203 0088 BEB7 in r27,__SP_H__ + 204 008a 1296 adiw r26,1+1 + 205 008c 5C92 st X,r5 + 206 008e 4E92 st -X,r4 + 207 0090 1197 sbiw r26,1 + 208 0092 1283 std Z+2,r17 + 209 0094 1382 std Z+3,__zero_reg__ + 210 0096 8482 std Z+4,r8 + 211 0098 9582 std Z+5,r9 + 212 009a A682 std Z+6,r10 + 213 009c B782 std Z+7,r11 + 214 009e C086 std Z+8,r12 + 215 00a0 D186 std Z+9,r13 + 216 00a2 E286 std Z+10,r14 + 217 00a4 F386 std Z+11,r15 + 218 .LCFI8: + 219 00a6 0E94 0000 call printf + 220 00aa 8DB7 in r24,__SP_L__ + 221 00ac 9EB7 in r25,__SP_H__ + 222 00ae 0C96 adiw r24,12 + 223 00b0 0FB6 in __tmp_reg__,__SREG__ + 224 00b2 F894 cli + 225 00b4 9EBF out __SP_H__,r25 + 226 00b6 0FBE out __SREG__,__tmp_reg__ + 227 00b8 8DBF out __SP_L__,r24 + 228 .LVL11: + 229 .L7: + 89:main.c **** if ((timer_millis() - last_toggle_time) > 10) { + 230 .loc 1 89 0 + 231 .LCFI9: + 232 00ba 0E94 0000 call timer_millis + 233 00be E22F mov r30,r18 + 234 00c0 E819 sub r30,r8 + 235 00c2 F1E0 ldi r31,lo8(1) + 236 00c4 2E17 cp r18,r30 + 237 00c6 00F0 brlo .L9 + 238 00c8 F0E0 ldi r31,lo8(0) + 239 .L9: + 240 00ca A32F mov r26,r19 + 241 00cc A919 sub r26,r9 + 242 00ce 21E0 ldi r18,lo8(1) + 243 00d0 3A17 cp r19,r26 + 244 00d2 00F0 brlo .L10 + 245 00d4 20E0 ldi r18,lo8(0) + 246 .L10: + 247 00d6 3A2F mov r19,r26 + 248 00d8 3F1B sub r19,r31 + 249 00da F1E0 ldi r31,lo8(1) + 250 00dc A317 cp r26,r19 + 251 00de 00F0 brlo .L11 + 252 00e0 F0E0 ldi r31,lo8(0) + 253 .L11: + 254 00e2 2F2B or r18,r31 + 255 00e4 A42F mov r26,r20 + 256 00e6 AA19 sub r26,r10 + 257 00e8 F1E0 ldi r31,lo8(1) + 258 00ea 4A17 cp r20,r26 + 259 00ec 00F0 brlo .L12 + 260 00ee F0E0 ldi r31,lo8(0) + 261 .L12: + 262 00f0 4A2F mov r20,r26 + 263 00f2 421B sub r20,r18 + 264 00f4 21E0 ldi r18,lo8(1) + 265 00f6 A417 cp r26,r20 + 266 00f8 00F0 brlo .L13 + 267 00fa 20E0 ldi r18,lo8(0) + 268 .L13: + 269 00fc F22B or r31,r18 + 270 00fe A52F mov r26,r21 + 271 0100 AB19 sub r26,r11 + 272 0102 21E0 ldi r18,lo8(1) + 273 0104 5A17 cp r21,r26 + 274 0106 00F0 brlo .L14 + 275 0108 20E0 ldi r18,lo8(0) + 276 .L14: + 277 010a 5A2F mov r21,r26 + 278 010c 5F1B sub r21,r31 + 279 010e F1E0 ldi r31,lo8(1) + 280 0110 A517 cp r26,r21 + 281 0112 00F0 brlo .L15 + 282 0114 F0E0 ldi r31,lo8(0) + 283 .L15: + 284 0116 2F2B or r18,r31 + 285 0118 A62F mov r26,r22 + 286 011a AC19 sub r26,r12 + 287 011c F1E0 ldi r31,lo8(1) + 288 011e 6A17 cp r22,r26 + 289 0120 00F0 brlo .L16 + 290 0122 F0E0 ldi r31,lo8(0) + 291 .L16: + 292 0124 6A2F mov r22,r26 + 293 0126 621B sub r22,r18 + 294 0128 21E0 ldi r18,lo8(1) + 295 012a A617 cp r26,r22 + 296 012c 00F0 brlo .L17 + 297 012e 20E0 ldi r18,lo8(0) + 298 .L17: + 299 0130 F22B or r31,r18 + 300 0132 272F mov r18,r23 + 301 0134 2D19 sub r18,r13 + 302 0136 A1E0 ldi r26,lo8(1) + 303 0138 7217 cp r23,r18 + 304 013a 00F0 brlo .L18 + 305 013c A0E0 ldi r26,lo8(0) + 306 .L18: + 307 013e 722F mov r23,r18 + 308 0140 7F1B sub r23,r31 + 309 0142 F1E0 ldi r31,lo8(1) + 310 0144 2717 cp r18,r23 + 311 0146 00F0 brlo .L19 + 312 0148 F0E0 ldi r31,lo8(0) + 313 .L19: + 314 014a AF2B or r26,r31 + 315 014c F82F mov r31,r24 + 316 014e FE19 sub r31,r14 + 317 0150 21E0 ldi r18,lo8(1) + 318 0152 8F17 cp r24,r31 + 319 0154 00F0 brlo .L20 + 320 0156 20E0 ldi r18,lo8(0) + 321 .L20: + 322 0158 8F2F mov r24,r31 + 323 015a 8A1B sub r24,r26 + 324 015c A1E0 ldi r26,lo8(1) + 325 015e F817 cp r31,r24 + 326 0160 00F0 brlo .L21 + 327 0162 A0E0 ldi r26,lo8(0) + 328 .L21: + 329 0164 2A2B or r18,r26 + 330 0166 9F19 sub r25,r15 + 331 0168 9217 cp r25,r18 + 332 016a 01F4 brne .L24 + 333 016c 8823 tst r24 + 334 016e 01F4 brne .L24 + 335 0170 7723 tst r23 + 336 0172 01F4 brne .L24 + 337 0174 6623 tst r22 + 338 0176 01F4 brne .L24 + 339 0178 5523 tst r21 + 340 017a 01F4 brne .L24 + 341 017c 4423 tst r20 + 342 017e 01F4 brne .L24 + 343 0180 3323 tst r19 + 344 0182 01F4 brne .L24 + 345 0184 EB30 cpi r30,lo8(11) + 346 0186 00F0 brlo .L8 + 347 .L24: + 51:main.c **** return bit_is_set(input_register, pin) != 0 ? 1 : 0; + 348 .loc 1 51 0 + 349 0188 012F mov r16,r17 + 350 .LVL12: + 351 .L8: + 94:main.c **** if (current_state != previous_state) { + 352 .loc 1 94 0 + 353 018a 0715 cp r16,r7 + 354 018c 01F4 brne .+2 + 355 018e 00C0 rjmp .L23 + 356 .loc 1 95 0 + 357 0190 ADB7 in r26,__SP_L__ + 358 0192 BEB7 in r27,__SP_H__ + 359 0194 1C97 sbiw r26,12 + 360 0196 0FB6 in __tmp_reg__,__SREG__ + 361 0198 F894 cli + 362 019a BEBF out __SP_H__,r27 + 363 019c 0FBE out __SREG__,__tmp_reg__ + 364 019e ADBF out __SP_L__,r26 + 365 01a0 EDB7 in r30,__SP_L__ + 366 01a2 FEB7 in r31,__SP_H__ + 367 01a4 3196 adiw r30,1 + 368 01a6 1296 adiw r26,1+1 + 369 01a8 3C92 st X,r3 + 370 01aa 2E92 st -X,r2 + 371 01ac 1197 sbiw r26,1 + 372 01ae 0283 std Z+2,r16 + 373 01b0 1382 std Z+3,__zero_reg__ + 374 01b2 8482 std Z+4,r8 + 375 01b4 9582 std Z+5,r9 + 376 01b6 A682 std Z+6,r10 + 377 01b8 B782 std Z+7,r11 + 378 01ba C086 std Z+8,r12 + 379 01bc D186 std Z+9,r13 + 380 01be E286 std Z+10,r14 + 381 01c0 F386 std Z+11,r15 + 382 .LCFI10: + 383 01c2 0E94 0000 call printf + 384 .LVL13: + 385 01c6 8DB7 in r24,__SP_L__ + 386 01c8 9EB7 in r25,__SP_H__ + 387 01ca 0C96 adiw r24,12 + 388 01cc 0FB6 in __tmp_reg__,__SREG__ + 389 01ce F894 cli + 390 01d0 9EBF out __SP_H__,r25 + 391 01d2 0FBE out __SREG__,__tmp_reg__ + 392 01d4 8DBF out __SP_L__,r24 + 393 01d6 702E mov r7,r16 + 394 01d8 00C0 rjmp .L23 + 395 .LFE8: + 397 .global uart_input + 398 .data + 401 uart_input: + 402 0034 0000 00 .skip 3,0 + 403 0037 01 .byte 1 + 404 0038 0000 0000 .skip 4,0 + 405 003c 0000 .word 0 + 406 003e 0000 .word gs(uart_getchar) + 407 0040 0000 .word 0 + 408 .global uart_output + 411 uart_output: + 412 0042 0000 00 .skip 3,0 + 413 0045 02 .byte 2 + 414 0046 0000 0000 .skip 4,0 + 415 004a 0000 .word gs(uart_putchar) + 416 004c 0000 .word 0 + 417 004e 0000 .word 0 + 512 .Letext0: + 513 .file 2 "/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h" + 514 .file 3 "/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdio.h" + 515 .file 4 "uart.h" +DEFINED SYMBOLS + *ABS*:0000000000000000 main.c +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:2 *ABS*:000000000000003f __SREG__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:3 *ABS*:000000000000003e __SP_H__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:4 *ABS*:000000000000003d __SP_L__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:5 *ABS*:0000000000000000 __tmp_reg__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:6 *ABS*:0000000000000001 __zero_reg__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:13 .text:0000000000000000 digital_read +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:54 .text:0000000000000028 digital_write +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:96 .text.startup:0000000000000000 main +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:411 .data:0000000000000042 uart_output +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccYMcvqY.s:401 .data:0000000000000034 uart_input + +UNDEFINED SYMBOLS +__do_copy_data +__do_clear_bss +timer_init +uart_init +__iob +timer_millis +printf +uart_getchar +uart_putchar diff --git a/button_debounce/main.map b/button_debounce/main.map new file mode 100644 index 0000000..8d01d25 --- /dev/null +++ b/button_debounce/main.map @@ -0,0 +1,679 @@ +Archive member included because of file (symbol) + +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + uart_async.o (__divmodhi4) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o (exit) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + main.o (__do_copy_data) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + main.o (__do_clear_bss) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + timer.o (__ashldi3) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) (__udivmodhi4) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + main.o (__iob) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + main.o (printf) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) (vfprintf) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) (strnlen_P) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) (strnlen) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) (fputc) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) (__ultoa_invert) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) (__prologue_saves__) +/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) (__epilogue_restores__) + +Allocating common symbols +Common symbol size file + +__iob 0x6 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x0000000000000000 0x0000000000020000 xr +data 0x0000000000800060 0x000000000000ffa0 rw !x +eeprom 0x0000000000810000 0x0000000000010000 rw !x +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +Address of section .data set to 0x800100 +LOAD /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +LOAD main.o +LOAD uart_async.o +LOAD timer.o +LOAD /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libm.a +LOAD /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a +LOAD /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a +LOAD /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text) + *(.rel.text.*) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.text.*) + *(.rela.gnu.linkonce.t*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata) + *(.rel.rodata.*) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.rodata.*) + *(.rela.gnu.linkonce.r*) + +.rel.data + *(.rel.data) + *(.rel.data.*) + *(.rel.gnu.linkonce.d*) + +.rela.data + *(.rela.data) + *(.rela.data.*) + *(.rela.gnu.linkonce.d*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x0000000000000000 0xe7a + *(.vectors) + .vectors 0x0000000000000000 0x68 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + 0x0000000000000000 __vectors + 0x0000000000000000 __vector_default + *(.vectors) + *(.progmem.gcc*) + *(.progmem*) + 0x0000000000000068 . = ALIGN (0x2) + 0x0000000000000068 __trampolines_start = . + *(.trampolines) + .trampolines 0x0000000000000068 0x0 linker stubs + *(.trampolines*) + 0x0000000000000068 __trampolines_end = . + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x0000000000000068 __ctors_start = . + *(.ctors) + 0x0000000000000068 __ctors_end = . + 0x0000000000000068 __dtors_start = . + *(.dtors) + 0x0000000000000068 __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x0000000000000068 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + 0x0000000000000068 __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x0000000000000068 0xc /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x0000000000000074 0x16 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + 0x0000000000000074 __do_copy_data + .init4 0x000000000000008a 0x10 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + 0x000000000000008a __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x000000000000009a 0x8 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + *(.init9) + *(.text) + .text 0x00000000000000a2 0x4 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + 0x00000000000000a2 __vector_20 + 0x00000000000000a2 __vector_1 + 0x00000000000000a2 __vector_24 + 0x00000000000000a2 __vector_12 + 0x00000000000000a2 __bad_interrupt + 0x00000000000000a2 __vector_6 + 0x00000000000000a2 __vector_3 + 0x00000000000000a2 __vector_23 + 0x00000000000000a2 __vector_25 + 0x00000000000000a2 __vector_11 + 0x00000000000000a2 __vector_13 + 0x00000000000000a2 __vector_17 + 0x00000000000000a2 __vector_7 + 0x00000000000000a2 __vector_5 + 0x00000000000000a2 __vector_4 + 0x00000000000000a2 __vector_9 + 0x00000000000000a2 __vector_2 + 0x00000000000000a2 __vector_21 + 0x00000000000000a2 __vector_15 + 0x00000000000000a2 __vector_8 + 0x00000000000000a2 __vector_10 + 0x00000000000000a2 __vector_16 + 0x00000000000000a2 __vector_22 + .text 0x00000000000000a6 0x4c main.o + 0x00000000000000a6 digital_read + 0x00000000000000ce digital_write + .text 0x00000000000000f2 0x1c0 uart_async.o + 0x00000000000000f2 uart_init + 0x000000000000012c uart_putchar + 0x0000000000000184 uart_getchar + 0x00000000000001ae __vector_18 + 0x000000000000022e __vector_19 + .text 0x00000000000002b2 0x310 timer.o + 0x00000000000002b2 timer_init + 0x00000000000002ec timer_millis + 0x000000000000030e timer_micros + 0x00000000000004f6 __vector_14 + .text 0x00000000000005c2 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + .text 0x00000000000005c2 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .text 0x00000000000005c2 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .text 0x00000000000005c2 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .text 0x00000000000005c2 0xf4 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + 0x00000000000005c2 __ashldi3 + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + .text 0x00000000000006b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + 0x00000000000006b6 . = ALIGN (0x2) + *(.text.*) + .text.startup 0x00000000000006b6 0x1da main.o + 0x00000000000006b6 main + .text.libgcc 0x0000000000000890 0x26 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + 0x0000000000000890 __divmodhi4 + 0x0000000000000890 _div + .text.libgcc 0x00000000000008b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .text.libgcc 0x00000000000008b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .text.libgcc 0x00000000000008b6 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000000008b6 0x28 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + 0x00000000000008b6 __udivmodhi4 + .text.avr-libc + 0x00000000000008de 0x2a /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + 0x00000000000008de printf + .text.avr-libc + 0x0000000000000908 0x3c0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + 0x0000000000000908 vfprintf + .text.avr-libc + 0x0000000000000cc8 0x16 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + 0x0000000000000cc8 strnlen_P + .text.avr-libc + 0x0000000000000cde 0x16 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen.o) + 0x0000000000000cde strnlen + .text.avr-libc + 0x0000000000000cf4 0x58 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + 0x0000000000000cf4 fputc + .text.avr-libc + 0x0000000000000d4c 0xbc /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + 0x0000000000000d4c __ultoa_invert + .text.libgcc 0x0000000000000e08 0x38 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + 0x0000000000000e08 __prologue_saves__ + .text.libgcc 0x0000000000000e40 0x36 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + 0x0000000000000e40 __epilogue_restores__ + 0x0000000000000e76 . = ALIGN (0x2) + *(.fini9) + .fini9 0x0000000000000e76 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + 0x0000000000000e76 exit + 0x0000000000000e76 _exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x0000000000000e76 0x4 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + *(.fini0) + 0x0000000000000e7a _etext = . + +.data 0x0000000000800100 0x50 load address 0x0000000000000e7a + 0x0000000000800100 PROVIDE (__data_start, .) + *(.data) + .data 0x0000000000800100 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + .data 0x0000000000800100 0x50 main.o + 0x0000000000800134 uart_input + 0x0000000000800142 uart_output + .data 0x0000000000800150 0x0 uart_async.o + .data 0x0000000000800150 0x0 timer.o + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + .data 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + *(.data*) + *(.rodata) + *(.rodata*) + *(.gnu.linkonce.d*) + 0x0000000000800150 . = ALIGN (0x2) + 0x0000000000800150 _edata = . + 0x0000000000800150 PROVIDE (__data_end, .) + +.bss 0x0000000000800150 0x256 + 0x0000000000800150 PROVIDE (__bss_start, .) + *(.bss) + .bss 0x0000000000800150 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + .bss 0x0000000000800150 0x0 main.o + .bss 0x0000000000800150 0x248 uart_async.o + .bss 0x0000000000800398 0x8 timer.o + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + .bss 0x00000000008003a0 0x0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + *(.bss*) + *(COMMON) + COMMON 0x00000000008003a0 0x6 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + 0x00000000008003a0 __iob + 0x00000000008003a6 PROVIDE (__bss_end, .) + 0x0000000000000e7a __data_load_start = LOADADDR (.data) + 0x0000000000000eca __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00000000008003a6 0x0 + 0x00000000008003a6 PROVIDE (__noinit_start, .) + *(.noinit*) + 0x00000000008003a6 PROVIDE (__noinit_end, .) + 0x00000000008003a6 _end = . + 0x00000000008003a6 PROVIDE (__heap_start, .) + +.eeprom 0x0000000000810000 0x0 + *(.eeprom*) + 0x0000000000810000 __eeprom_end = . + +.stab 0x0000000000000000 0xc84 + *(.stab) + .stab 0x0000000000000000 0x6cc /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + .stab 0x00000000000006cc 0x9c /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + 0xa8 (size before relaxing) + .stab 0x0000000000000768 0x9c /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen.o) + 0xa8 (size before relaxing) + .stab 0x0000000000000804 0x480 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + 0x48c (size before relaxing) + +.stabstr 0x0000000000000000 0x19d + *(.stabstr) + .stabstr 0x0000000000000000 0x19d /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment + *(.comment) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x0000000000000000 0x1c8 + *(.debug_aranges) + .debug_aranges + 0x0000000000000000 0x28 main.o + .debug_aranges + 0x0000000000000028 0x20 uart_async.o + .debug_aranges + 0x0000000000000048 0x20 timer.o + .debug_aranges + 0x0000000000000068 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + .debug_aranges + 0x0000000000000088 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .debug_aranges + 0x00000000000000a8 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .debug_aranges + 0x00000000000000c8 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .debug_aranges + 0x00000000000000e8 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .debug_aranges + 0x0000000000000108 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + .debug_aranges + 0x0000000000000128 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .debug_aranges + 0x0000000000000148 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .debug_aranges + 0x0000000000000168 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + .debug_aranges + 0x0000000000000188 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + .debug_aranges + 0x00000000000001a8 0x20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x0000000000000000 0x145e + *(.debug_info) + .debug_info 0x0000000000000000 0x2f2 main.o + .debug_info 0x00000000000002f2 0x2d0 uart_async.o + .debug_info 0x00000000000005c2 0xe3 timer.o + .debug_info 0x00000000000006a5 0x9f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + .debug_info 0x0000000000000744 0x9f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .debug_info 0x00000000000007e3 0x9f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .debug_info 0x0000000000000882 0x9f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .debug_info 0x0000000000000921 0x184 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .debug_info 0x0000000000000aa5 0x9f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + .debug_info 0x0000000000000b44 0x153 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + .debug_info 0x0000000000000c97 0x1ca /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .debug_info 0x0000000000000e61 0x354 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .debug_info 0x00000000000011b5 0x16b /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + .debug_info 0x0000000000001320 0x9f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + .debug_info 0x00000000000013bf 0x9f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + *(.gnu.linkonce.wi.*) + +.debug_abbrev 0x0000000000000000 0x983 + *(.debug_abbrev) + .debug_abbrev 0x0000000000000000 0x1e6 main.o + .debug_abbrev 0x00000000000001e6 0x15f uart_async.o + .debug_abbrev 0x0000000000000345 0x9f timer.o + .debug_abbrev 0x00000000000003e4 0x14 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + .debug_abbrev 0x00000000000003f8 0x14 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .debug_abbrev 0x000000000000040c 0x14 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .debug_abbrev 0x0000000000000420 0x14 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .debug_abbrev 0x0000000000000434 0xf0 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .debug_abbrev 0x0000000000000524 0x14 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + .debug_abbrev 0x0000000000000538 0xc7 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + .debug_abbrev 0x00000000000005ff 0x11e /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .debug_abbrev 0x000000000000071d 0x163 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .debug_abbrev 0x0000000000000880 0xdb /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + .debug_abbrev 0x000000000000095b 0x14 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + .debug_abbrev 0x000000000000096f 0x14 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + +.debug_line 0x0000000000000000 0x953 + *(.debug_line) + .debug_line 0x0000000000000000 0xe5 main.o + .debug_line 0x00000000000000e5 0xc4 uart_async.o + .debug_line 0x00000000000001a9 0xa6 timer.o + .debug_line 0x000000000000024f 0x70 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + .debug_line 0x00000000000002bf 0x5f /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + .debug_line 0x000000000000031e 0x68 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + .debug_line 0x0000000000000386 0x65 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + .debug_line 0x00000000000003eb 0x6e /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .debug_line 0x0000000000000459 0x71 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + .debug_line 0x00000000000004ca 0x62 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + .debug_line 0x000000000000052c 0xbc /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .debug_line 0x00000000000005e8 0x1fe /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .debug_line 0x00000000000007e6 0x7c /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + .debug_line 0x0000000000000862 0x79 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + .debug_line 0x00000000000008db 0x78 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + +.debug_frame 0x0000000000000000 0x35c + *(.debug_frame) + .debug_frame 0x0000000000000000 0x70 main.o + .debug_frame 0x0000000000000070 0xf8 uart_async.o + .debug_frame 0x0000000000000168 0xf8 timer.o + .debug_frame 0x0000000000000260 0x4c /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .debug_frame 0x00000000000002ac 0x2c /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .debug_frame 0x00000000000002d8 0x4c /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .debug_frame 0x0000000000000324 0x38 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + +.debug_str 0x0000000000000000 0x421 + *(.debug_str) + .debug_str 0x0000000000000000 0x15a main.o + 0x198 (size before relaxing) + .debug_str 0x000000000000015a 0x95 uart_async.o + 0x16b (size before relaxing) + .debug_str 0x00000000000001ef 0x3a timer.o + 0xfc (size before relaxing) + .debug_str 0x0000000000000229 0xc3 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + 0x148 (size before relaxing) + .debug_str 0x00000000000002ec 0x60 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + 0x104 (size before relaxing) + .debug_str 0x000000000000034c 0x3e /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + 0x137 (size before relaxing) + .debug_str 0x000000000000038a 0x75 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + 0x189 (size before relaxing) + .debug_str 0x00000000000003ff 0x22 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + 0x10d (size before relaxing) + +.debug_loc 0x0000000000000000 0xcc7 + *(.debug_loc) + .debug_loc 0x0000000000000000 0x1b0 main.o + .debug_loc 0x00000000000001b0 0x277 uart_async.o + .debug_loc 0x0000000000000427 0x1d6 timer.o + .debug_loc 0x00000000000005fd 0xf4 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + .debug_loc 0x00000000000006f1 0x21 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .debug_loc 0x0000000000000712 0x51c /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .debug_loc 0x0000000000000c2e 0x99 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + +.debug_macinfo + *(.debug_macinfo) +OUTPUT(main.elf elf32-avr) +LOAD linker stubs + +.debug_ranges 0x0000000000000000 0x48 + .debug_ranges 0x0000000000000000 0x18 main.o + .debug_ranges 0x0000000000000018 0x10 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + .debug_ranges 0x0000000000000028 0x10 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + .debug_ranges 0x0000000000000038 0x10 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + +Cross Reference Table + +Symbol File +__ashldi3 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + timer.o +__bad_interrupt /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__bss_end /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) +__bss_start /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) +__data_end /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) +__data_load_start /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) +__data_start /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) +__divmodhi4 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) + uart_async.o +__do_clear_bss /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_clear_bss.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + timer.o + uart_async.o + main.o +__do_copy_data /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_copy_data.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_ashldi3.o) + timer.o + uart_async.o + main.o +__epilogue_restores__ /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_epilogue.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) +__heap_end /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__init /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__iob /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(iob.o) + main.o +__prologue_saves__ /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_prologue.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) +__stack /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__udivmodhi4 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_udivmodhi4.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) +__ultoa_invert /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) +__vector_1 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_10 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_11 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_12 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_13 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_14 timer.o + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_15 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_16 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_17 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_18 uart_async.o + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_19 uart_async.o + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_2 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_20 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_21 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_22 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_23 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_24 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_25 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_3 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_4 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_5 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_6 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_7 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_8 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_9 /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vector_default /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +__vectors /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +_div /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_divmodhi4.o) +_exit /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) +digital_read main.o +digital_write main.o +exit /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/avr5/libgcc.a(_exit.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +fputc /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(fputc.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) +main main.o + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/crtm328p.o +printf /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) + main.o +strnlen /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) +strnlen_P /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) +timer_init timer.o + main.o +timer_micros timer.o +timer_millis timer.o + main.o +uart_getchar uart_async.o + main.o +uart_init uart_async.o + main.o +uart_input main.o +uart_output main.o +uart_putchar uart_async.o + main.o +vfprintf /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + /usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/lib/avr5/libc.a(printf.o) diff --git a/button_debounce/main.o b/button_debounce/main.o new file mode 100644 index 0000000..3a3f21e Binary files /dev/null and b/button_debounce/main.o differ diff --git a/button_debounce/main.sym b/button_debounce/main.sym new file mode 100644 index 0000000..fa4214d --- /dev/null +++ b/button_debounce/main.sym @@ -0,0 +1,126 @@ +00000000 W __heap_end +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 W __vector_default +00000000 T __vectors +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +00000068 T __ctors_end +00000068 T __ctors_start +00000068 T __dtors_end +00000068 T __dtors_start +00000068 W __init +00000068 T __trampolines_end +00000068 T __trampolines_start +00000074 T __do_copy_data +0000008a T __do_clear_bss +00000092 t .do_clear_bss_loop +00000094 t .do_clear_bss_start +000000a2 T __bad_interrupt +000000a2 W __vector_1 +000000a2 W __vector_10 +000000a2 W __vector_11 +000000a2 W __vector_12 +000000a2 W __vector_13 +000000a2 W __vector_15 +000000a2 W __vector_16 +000000a2 W __vector_17 +000000a2 W __vector_2 +000000a2 W __vector_20 +000000a2 W __vector_21 +000000a2 W __vector_22 +000000a2 W __vector_23 +000000a2 W __vector_24 +000000a2 W __vector_25 +000000a2 W __vector_3 +000000a2 W __vector_4 +000000a2 W __vector_5 +000000a2 W __vector_6 +000000a2 W __vector_7 +000000a2 W __vector_8 +000000a2 W __vector_9 +000000a6 T digital_read +000000ce T digital_write +000000f2 T uart_init +0000012c T uart_putchar +00000184 T uart_getchar +000001ae T __vector_18 +0000022e T __vector_19 +000002b2 T timer_init +000002ec T timer_millis +0000030e T timer_micros +000004f6 T __vector_14 +000005c2 T __ashldi3 +000006b6 T main +00000890 T __divmodhi4 +00000890 T _div +000008a4 t __divmodhi4_neg2 +000008aa t __divmodhi4_exit +000008ac t __divmodhi4_neg1 +000008b6 T __udivmodhi4 +000008be t __udivmodhi4_loop +000008cc t __udivmodhi4_ep +000008de T printf +000008ff W __stack +00000908 T vfprintf +00000cc8 T strnlen_P +00000cde T strnlen +00000cf4 T fputc +00000d4c T __ultoa_invert +00000e08 T __prologue_saves__ +00000e40 T __epilogue_restores__ +00000e76 T _exit +00000e76 W exit +00000e78 t __stop_program +00000e7a A __data_load_start +00000e7a T _etext +00000eca A __data_load_end +00800100 D __data_start +00800134 D uart_input +00800142 D uart_output +00800150 B __bss_start +00800150 D __data_end +00800150 D _edata +00800150 b tx_buffer +00800354 b rx_buffer +00800398 b _timer_millis +008003a0 B __iob +008003a6 B __bss_end +008003a6 N _end +00810000 N __eeprom_end diff --git a/button_debounce/timer.lst b/button_debounce/timer.lst new file mode 100644 index 0000000..b1dd48c --- /dev/null +++ b/button_debounce/timer.lst @@ -0,0 +1,567 @@ + 1 .file "timer.c" + 2 __SREG__ = 0x3f + 3 __SP_H__ = 0x3e + 4 __SP_L__ = 0x3d + 5 __tmp_reg__ = 0 + 6 __zero_reg__ = 1 + 7 .global __do_copy_data + 8 .global __do_clear_bss + 9 .text + 10 .Ltext0: + 11 .global timer_init + 13 timer_init: + 14 .LFB0: + 15 .file 1 "timer.c" + 1:timer.c **** /* + 2:timer.c **** * Low resolution implementation of timer using a 8 bit clock with prescaler, + 3:timer.c **** * etc. Clicks approximately every millisecond. Microseconds are not available, + 4:timer.c **** * and any queries to the function will just return milliseconds * 1000. + 5:timer.c **** * You can use this file when you don't need high resolution timing, and don't care + 6:timer.c **** * about slight clock drift, inaccuracy, etc. For timing most human-related activities, + 7:timer.c **** * though, it should be more than sufficient. + 8:timer.c **** */ + 9:timer.c **** #include "timer.h" + 10:timer.c **** + 11:timer.c **** static volatile uint64_t _timer_millis; + 12:timer.c **** + 13:timer.c **** /* + 14:timer.c **** * Initializes the timer, and resets the timer count to 0. Sets up the ISRs + 15:timer.c **** * linked with timer0. + 16:timer.c **** */ + 17:timer.c **** void timer_init(){ + 16 .loc 1 17 0 + 17 /* prologue: function */ + 18 /* frame size = 0 */ + 19 /* stack size = 0 */ + 20 .L__stack_usage = 0 + 18:timer.c **** //Set up the timer to run at F_CPU / 256, in normal mode (we reset TCNT0 in the ISR) + 19:timer.c **** TCCR0A = 0x0; + 21 .loc 1 19 0 + 22 0000 14BC out 68-0x20,__zero_reg__ + 20:timer.c **** TCCR0B |= _BV(CS02); + 23 .loc 1 20 0 + 24 0002 85B5 in r24,69-0x20 + 25 0004 8460 ori r24,lo8(4) + 26 0006 85BD out 69-0x20,r24 + 21:timer.c **** + 22:timer.c **** //Set compare value to be F_CPU / 1000 -- fire interrupt every millisecond + 23:timer.c **** OCR0A = F_CPU / 256 / 1000; + 27 .loc 1 23 0 + 28 0008 8EE3 ldi r24,lo8(62) + 29 000a 87BD out 71-0x20,r24 + 24:timer.c **** + 25:timer.c **** //Enable compare interrupt + 26:timer.c **** TIMSK0 = _BV(OCIE0A); + 30 .loc 1 26 0 + 31 000c 82E0 ldi r24,lo8(2) + 32 000e 8093 6E00 sts 110,r24 + 27:timer.c **** + 28:timer.c **** //Reset count variables + 29:timer.c **** _timer_millis = 0; + 33 .loc 1 29 0 + 34 0012 1092 0000 sts _timer_millis,__zero_reg__ + 35 0016 1092 0000 sts _timer_millis+1,__zero_reg__ + 36 001a 1092 0000 sts _timer_millis+2,__zero_reg__ + 37 001e 1092 0000 sts _timer_millis+3,__zero_reg__ + 38 0022 1092 0000 sts _timer_millis+4,__zero_reg__ + 39 0026 1092 0000 sts _timer_millis+5,__zero_reg__ + 40 002a 1092 0000 sts _timer_millis+6,__zero_reg__ + 41 002e 1092 0000 sts _timer_millis+7,__zero_reg__ + 30:timer.c **** + 31:timer.c **** //Enable interrupts if the NO_INTERRUPT_ENABLE define is not set. If it is, you need to call sei( + 32:timer.c **** #ifndef NO_INTERRUPT_ENABLE + 33:timer.c **** sei(); + 42 .loc 1 33 0 + 43 /* #APP */ + 44 ; 33 "timer.c" 1 + 45 0032 7894 sei + 46 ; 0 "" 2 + 34:timer.c **** #endif + 35:timer.c **** + 36:timer.c **** DDRB = 0xFF; + 47 .loc 1 36 0 + 48 /* #NOAPP */ + 49 0034 8FEF ldi r24,lo8(-1) + 50 0036 84B9 out 36-0x20,r24 + 51 /* epilogue start */ + 37:timer.c **** } + 52 .loc 1 37 0 + 53 0038 0895 ret + 54 .LFE0: + 56 .global timer_millis + 58 timer_millis: + 59 .LFB1: + 38:timer.c **** + 39:timer.c **** /* + 40:timer.c **** * Returns the number of milliseconds which have elapsed since the + 41:timer.c **** * last time timer_init() was called. Overflows after about 49 days. + 42:timer.c **** */ + 43:timer.c **** uint64_t timer_millis(){ + 60 .loc 1 43 0 + 61 /* prologue: function */ + 62 /* frame size = 0 */ + 63 /* stack size = 0 */ + 64 .L__stack_usage = 0 + 44:timer.c **** return _timer_millis; + 65 .loc 1 44 0 + 66 003a 2091 0000 lds r18,_timer_millis + 67 003e 3091 0000 lds r19,_timer_millis+1 + 68 0042 4091 0000 lds r20,_timer_millis+2 + 69 0046 5091 0000 lds r21,_timer_millis+3 + 70 004a 6091 0000 lds r22,_timer_millis+4 + 71 004e 7091 0000 lds r23,_timer_millis+5 + 72 0052 8091 0000 lds r24,_timer_millis+6 + 73 0056 9091 0000 lds r25,_timer_millis+7 + 74 /* epilogue start */ + 45:timer.c **** } + 75 .loc 1 45 0 + 76 005a 0895 ret + 77 .LFE1: + 79 .global timer_micros + 81 timer_micros: + 82 .LFB2: + 46:timer.c **** + 47:timer.c **** /* + 48:timer.c **** * Returns the number of microseconds which have elapsed since the + 49:timer.c **** * last time timer_init() was called. Overflows after about 71 minutes. + 50:timer.c **** */ + 51:timer.c **** uint64_t timer_micros(){ + 83 .loc 1 51 0 + 84 005c 2F92 push r2 + 85 .LCFI0: + 86 005e 3F92 push r3 + 87 .LCFI1: + 88 0060 4F92 push r4 + 89 .LCFI2: + 90 0062 5F92 push r5 + 91 .LCFI3: + 92 0064 6F92 push r6 + 93 .LCFI4: + 94 0066 7F92 push r7 + 95 .LCFI5: + 96 0068 8F92 push r8 + 97 .LCFI6: + 98 006a 9F92 push r9 + 99 .LCFI7: + 100 006c AF92 push r10 + 101 .LCFI8: + 102 006e BF92 push r11 + 103 .LCFI9: + 104 0070 CF92 push r12 + 105 .LCFI10: + 106 0072 DF92 push r13 + 107 .LCFI11: + 108 0074 EF92 push r14 + 109 .LCFI12: + 110 0076 FF92 push r15 + 111 .LCFI13: + 112 0078 0F93 push r16 + 113 .LCFI14: + 114 007a 1F93 push r17 + 115 .LCFI15: + 116 007c CF93 push r28 + 117 .LCFI16: + 118 007e DF93 push r29 + 119 .LCFI17: + 120 0080 0F92 push __tmp_reg__ + 121 .LCFI18: + 122 0082 CDB7 in r28,__SP_L__ + 123 0084 DEB7 in r29,__SP_H__ + 124 .LCFI19: + 125 /* prologue: function */ + 126 /* frame size = 1 */ + 127 /* stack size = 19 */ + 128 .L__stack_usage = 19 + 52:timer.c **** return (_timer_millis * 1000); + 129 .loc 1 52 0 + 130 0086 8090 0000 lds r8,_timer_millis + 131 008a 7090 0000 lds r7,_timer_millis+1 + 132 008e 6090 0000 lds r6,_timer_millis+2 + 133 0092 5090 0000 lds r5,_timer_millis+3 + 134 0096 4090 0000 lds r4,_timer_millis+4 + 135 009a 3090 0000 lds r3,_timer_millis+5 + 136 009e 2090 0000 lds r2,_timer_millis+6 + 137 00a2 8091 0000 lds r24,_timer_millis+7 + 138 00a6 8983 std Y+1,r24 + 139 00a8 282D mov r18,r8 + 140 00aa 372D mov r19,r7 + 141 00ac 462D mov r20,r6 + 142 00ae 552D mov r21,r5 + 143 00b0 642D mov r22,r4 + 144 00b2 732D mov r23,r3 + 145 00b4 822D mov r24,r2 + 146 00b6 9981 ldd r25,Y+1 + 147 00b8 02E0 ldi r16,lo8(2) + 148 00ba 0E94 0000 call __ashldi3 + 149 00be F22E mov r15,r18 + 150 00c0 132F mov r17,r19 + 151 00c2 E42E mov r14,r20 + 152 00c4 D52E mov r13,r21 + 153 00c6 C62E mov r12,r22 + 154 00c8 B72E mov r11,r23 + 155 00ca A82E mov r10,r24 + 156 00cc 992E mov r9,r25 + 157 00ce 05E0 ldi r16,lo8(5) + 158 00d0 0E94 0000 call __ashldi3 + 159 00d4 B22F mov r27,r18 + 160 00d6 BF19 sub r27,r15 + 161 00d8 F1E0 ldi r31,lo8(1) + 162 00da 2B17 cp r18,r27 + 163 00dc 00F0 brlo .L4 + 164 00de F0E0 ldi r31,lo8(0) + 165 .L4: + 166 00e0 232F mov r18,r19 + 167 00e2 211B sub r18,r17 + 168 00e4 E1E0 ldi r30,lo8(1) + 169 00e6 3217 cp r19,r18 + 170 00e8 00F0 brlo .L5 + 171 00ea E0E0 ldi r30,lo8(0) + 172 .L5: + 173 00ec 022F mov r16,r18 + 174 00ee 0F1B sub r16,r31 + 175 00f0 31E0 ldi r19,lo8(1) + 176 00f2 2017 cp r18,r16 + 177 00f4 00F0 brlo .L6 + 178 00f6 30E0 ldi r19,lo8(0) + 179 .L6: + 180 00f8 E32B or r30,r19 + 181 00fa 342F mov r19,r20 + 182 00fc 3E19 sub r19,r14 + 183 00fe 21E0 ldi r18,lo8(1) + 184 0100 4317 cp r20,r19 + 185 0102 00F0 brlo .L7 + 186 0104 20E0 ldi r18,lo8(0) + 187 .L7: + 188 0106 F32E mov r15,r19 + 189 0108 FE1A sub r15,r30 + 190 010a 41E0 ldi r20,lo8(1) + 191 010c 3F15 cp r19,r15 + 192 010e 00F0 brlo .L8 + 193 0110 40E0 ldi r20,lo8(0) + 194 .L8: + 195 0112 242B or r18,r20 + 196 0114 452F mov r20,r21 + 197 0116 4D19 sub r20,r13 + 198 0118 31E0 ldi r19,lo8(1) + 199 011a 5417 cp r21,r20 + 200 011c 00F0 brlo .L9 + 201 011e 30E0 ldi r19,lo8(0) + 202 .L9: + 203 0120 142F mov r17,r20 + 204 0122 121B sub r17,r18 + 205 0124 21E0 ldi r18,lo8(1) + 206 0126 4117 cp r20,r17 + 207 0128 00F0 brlo .L10 + 208 012a 20E0 ldi r18,lo8(0) + 209 .L10: + 210 012c 322B or r19,r18 + 211 012e 462F mov r20,r22 + 212 0130 4C19 sub r20,r12 + 213 0132 21E0 ldi r18,lo8(1) + 214 0134 6417 cp r22,r20 + 215 0136 00F0 brlo .L11 + 216 0138 20E0 ldi r18,lo8(0) + 217 .L11: + 218 013a A42F mov r26,r20 + 219 013c A31B sub r26,r19 + 220 013e 31E0 ldi r19,lo8(1) + 221 0140 4A17 cp r20,r26 + 222 0142 00F0 brlo .L12 + 223 0144 30E0 ldi r19,lo8(0) + 224 .L12: + 225 0146 232B or r18,r19 + 226 0148 472F mov r20,r23 + 227 014a 4B19 sub r20,r11 + 228 014c 31E0 ldi r19,lo8(1) + 229 014e 7417 cp r23,r20 + 230 0150 00F0 brlo .L13 + 231 0152 30E0 ldi r19,lo8(0) + 232 .L13: + 233 0154 E42F mov r30,r20 + 234 0156 E21B sub r30,r18 + 235 0158 21E0 ldi r18,lo8(1) + 236 015a 4E17 cp r20,r30 + 237 015c 00F0 brlo .L14 + 238 015e 20E0 ldi r18,lo8(0) + 239 .L14: + 240 0160 322B or r19,r18 + 241 0162 482F mov r20,r24 + 242 0164 4A19 sub r20,r10 + 243 0166 21E0 ldi r18,lo8(1) + 244 0168 8417 cp r24,r20 + 245 016a 00F0 brlo .L15 + 246 016c 20E0 ldi r18,lo8(0) + 247 .L15: + 248 016e F42F mov r31,r20 + 249 0170 F31B sub r31,r19 + 250 0172 81E0 ldi r24,lo8(1) + 251 0174 4F17 cp r20,r31 + 252 0176 00F0 brlo .L16 + 253 0178 80E0 ldi r24,lo8(0) + 254 .L16: + 255 017a 282B or r18,r24 + 256 017c 9919 sub r25,r9 + 257 017e 921B sub r25,r18 + 258 0180 2B2F mov r18,r27 + 259 0182 280D add r18,r8 + 260 0184 31E0 ldi r19,lo8(1) + 261 0186 2B17 cp r18,r27 + 262 0188 00F0 brlo .L17 + 263 018a 30E0 ldi r19,lo8(0) + 264 .L17: + 265 018c 700E add r7,r16 + 266 018e 41E0 ldi r20,lo8(1) + 267 0190 7016 cp r7,r16 + 268 0192 00F0 brlo .L18 + 269 0194 40E0 ldi r20,lo8(0) + 270 .L18: + 271 0196 370D add r19,r7 + 272 0198 81E0 ldi r24,lo8(1) + 273 019a 3715 cp r19,r7 + 274 019c 00F0 brlo .L19 + 275 019e 80E0 ldi r24,lo8(0) + 276 .L19: + 277 01a0 482B or r20,r24 + 278 01a2 6F0C add r6,r15 + 279 01a4 51E0 ldi r21,lo8(1) + 280 01a6 6F14 cp r6,r15 + 281 01a8 00F0 brlo .L20 + 282 01aa 50E0 ldi r21,lo8(0) + 283 .L20: + 284 01ac 460D add r20,r6 + 285 01ae 81E0 ldi r24,lo8(1) + 286 01b0 4615 cp r20,r6 + 287 01b2 00F0 brlo .L21 + 288 01b4 80E0 ldi r24,lo8(0) + 289 .L21: + 290 01b6 582B or r21,r24 + 291 01b8 510E add r5,r17 + 292 01ba 61E0 ldi r22,lo8(1) + 293 01bc 5116 cp r5,r17 + 294 01be 00F0 brlo .L22 + 295 01c0 60E0 ldi r22,lo8(0) + 296 .L22: + 297 01c2 550D add r21,r5 + 298 01c4 81E0 ldi r24,lo8(1) + 299 01c6 5515 cp r21,r5 + 300 01c8 00F0 brlo .L23 + 301 01ca 80E0 ldi r24,lo8(0) + 302 .L23: + 303 01cc 682B or r22,r24 + 304 01ce 4A0E add r4,r26 + 305 01d0 71E0 ldi r23,lo8(1) + 306 01d2 4A16 cp r4,r26 + 307 01d4 00F0 brlo .L24 + 308 01d6 70E0 ldi r23,lo8(0) + 309 .L24: + 310 01d8 640D add r22,r4 + 311 01da 81E0 ldi r24,lo8(1) + 312 01dc 6415 cp r22,r4 + 313 01de 00F0 brlo .L25 + 314 01e0 80E0 ldi r24,lo8(0) + 315 .L25: + 316 01e2 782B or r23,r24 + 317 01e4 3E0E add r3,r30 + 318 01e6 81E0 ldi r24,lo8(1) + 319 01e8 3E16 cp r3,r30 + 320 01ea 00F0 brlo .L26 + 321 01ec 80E0 ldi r24,lo8(0) + 322 .L26: + 323 01ee 730D add r23,r3 + 324 01f0 E1E0 ldi r30,lo8(1) + 325 01f2 7315 cp r23,r3 + 326 01f4 00F0 brlo .L27 + 327 01f6 E0E0 ldi r30,lo8(0) + 328 .L27: + 329 01f8 8E2B or r24,r30 + 330 01fa 2F0E add r2,r31 + 331 01fc E1E0 ldi r30,lo8(1) + 332 01fe 2F16 cp r2,r31 + 333 0200 00F0 brlo .L28 + 334 0202 E0E0 ldi r30,lo8(0) + 335 .L28: + 336 0204 820D add r24,r2 + 337 0206 F1E0 ldi r31,lo8(1) + 338 0208 8215 cp r24,r2 + 339 020a 00F0 brlo .L29 + 340 020c F0E0 ldi r31,lo8(0) + 341 .L29: + 342 020e EF2B or r30,r31 + 343 0210 A981 ldd r26,Y+1 + 344 0212 9A0F add r25,r26 + 345 0214 9E0F add r25,r30 + 346 0216 03E0 ldi r16,lo8(3) + 347 0218 0E94 0000 call __ashldi3 + 348 /* epilogue start */ + 53:timer.c **** } + 349 .loc 1 53 0 + 350 021c 0F90 pop __tmp_reg__ + 351 021e DF91 pop r29 + 352 0220 CF91 pop r28 + 353 0222 1F91 pop r17 + 354 0224 0F91 pop r16 + 355 0226 FF90 pop r15 + 356 0228 EF90 pop r14 + 357 022a DF90 pop r13 + 358 022c CF90 pop r12 + 359 022e BF90 pop r11 + 360 0230 AF90 pop r10 + 361 0232 9F90 pop r9 + 362 0234 8F90 pop r8 + 363 0236 7F90 pop r7 + 364 0238 6F90 pop r6 + 365 023a 5F90 pop r5 + 366 023c 4F90 pop r4 + 367 023e 3F90 pop r3 + 368 0240 2F90 pop r2 + 369 0242 0895 ret + 370 .LFE2: + 372 .global __vector_14 + 374 __vector_14: + 375 .LFB3: + 54:timer.c **** + 55:timer.c **** + 56:timer.c **** /* + 57:timer.c **** * The ISR for timer0 overflow. Increment the _timer_count here, and do the calculcations + 58:timer.c **** * to increment _timer_millis as needed. + 59:timer.c **** */ + 60:timer.c **** ISR(TIMER0_COMPA_vect){ + 376 .loc 1 60 0 + 377 0244 1F92 push r1 + 378 .LCFI20: + 379 0246 0F92 push r0 + 380 .LCFI21: + 381 0248 0FB6 in r0,__SREG__ + 382 024a 0F92 push r0 + 383 024c 1124 clr __zero_reg__ + 384 024e 2F93 push r18 + 385 .LCFI22: + 386 0250 3F93 push r19 + 387 .LCFI23: + 388 0252 4F93 push r20 + 389 .LCFI24: + 390 0254 5F93 push r21 + 391 .LCFI25: + 392 0256 6F93 push r22 + 393 .LCFI26: + 394 0258 7F93 push r23 + 395 .LCFI27: + 396 025a 8F93 push r24 + 397 .LCFI28: + 398 025c 9F93 push r25 + 399 .LCFI29: + 400 025e AF93 push r26 + 401 .LCFI30: + 402 0260 EF93 push r30 + 403 .LCFI31: + 404 0262 FF93 push r31 + 405 .LCFI32: + 406 /* prologue: Signal */ + 407 /* frame size = 0 */ + 408 /* stack size = 14 */ + 409 .L__stack_usage = 14 + 61:timer.c **** TCNT0 = 0; + 410 .loc 1 61 0 + 411 0264 16BC out 70-0x20,__zero_reg__ + 62:timer.c **** _timer_millis++; + 412 .loc 1 62 0 + 413 0266 4091 0000 lds r20,_timer_millis + 414 026a 3091 0000 lds r19,_timer_millis+1 + 415 026e 2091 0000 lds r18,_timer_millis+2 + 416 0272 9091 0000 lds r25,_timer_millis+3 + 417 0276 8091 0000 lds r24,_timer_millis+4 + 418 027a F091 0000 lds r31,_timer_millis+5 + 419 027e E091 0000 lds r30,_timer_millis+6 + 420 0282 A091 0000 lds r26,_timer_millis+7 + 421 0286 642F mov r22,r20 + 422 0288 6F5F subi r22,lo8(-(1)) + 423 028a 51E0 ldi r21,lo8(1) + 424 028c 6417 cp r22,r20 + 425 028e 00F0 brlo .L31 + 426 0290 50E0 ldi r21,lo8(0) + 427 .L31: + 428 0292 530F add r21,r19 + 429 0294 41E0 ldi r20,lo8(1) + 430 0296 5317 cp r21,r19 + 431 0298 00F0 brlo .L33 + 432 029a 40E0 ldi r20,lo8(0) + 433 .L33: + 434 029c 420F add r20,r18 + 435 029e 31E0 ldi r19,lo8(1) + 436 02a0 4217 cp r20,r18 + 437 02a2 00F0 brlo .L35 + 438 02a4 30E0 ldi r19,lo8(0) + 439 .L35: + 440 02a6 390F add r19,r25 + 441 02a8 21E0 ldi r18,lo8(1) + 442 02aa 3917 cp r19,r25 + 443 02ac 00F0 brlo .L37 + 444 02ae 20E0 ldi r18,lo8(0) + 445 .L37: + 446 02b0 280F add r18,r24 + 447 02b2 91E0 ldi r25,lo8(1) + 448 02b4 2817 cp r18,r24 + 449 02b6 00F0 brlo .L39 + 450 02b8 90E0 ldi r25,lo8(0) + 451 .L39: + 452 02ba 9F0F add r25,r31 + 453 02bc 81E0 ldi r24,lo8(1) + 454 02be 9F17 cp r25,r31 + 455 02c0 00F0 brlo .L41 + 456 02c2 80E0 ldi r24,lo8(0) + 457 .L41: + 458 02c4 8E0F add r24,r30 + 459 02c6 71E0 ldi r23,lo8(1) + 460 02c8 8E17 cp r24,r30 + 461 02ca 00F0 brlo .L43 + 462 02cc 70E0 ldi r23,lo8(0) + 463 .L43: + 464 02ce 7A0F add r23,r26 + 465 02d0 6093 0000 sts _timer_millis,r22 + 466 02d4 5093 0000 sts _timer_millis+1,r21 + 467 02d8 4093 0000 sts _timer_millis+2,r20 + 468 02dc 3093 0000 sts _timer_millis+3,r19 + 469 02e0 2093 0000 sts _timer_millis+4,r18 + 470 02e4 9093 0000 sts _timer_millis+5,r25 + 471 02e8 8093 0000 sts _timer_millis+6,r24 + 472 02ec 7093 0000 sts _timer_millis+7,r23 + 473 /* epilogue start */ + 63:timer.c **** } + 474 .loc 1 63 0 + 475 02f0 FF91 pop r31 + 476 02f2 EF91 pop r30 + 477 02f4 AF91 pop r26 + 478 02f6 9F91 pop r25 + 479 02f8 8F91 pop r24 + 480 02fa 7F91 pop r23 + 481 02fc 6F91 pop r22 + 482 02fe 5F91 pop r21 + 483 0300 4F91 pop r20 + 484 0302 3F91 pop r19 + 485 0304 2F91 pop r18 + 486 0306 0F90 pop r0 + 487 0308 0FBE out __SREG__,r0 + 488 030a 0F90 pop r0 + 489 030c 1F90 pop r1 + 490 030e 1895 reti + 491 .LFE3: + 493 .lcomm _timer_millis,8 + 738 .Letext0: + 739 .file 2 "/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h" +DEFINED SYMBOLS + *ABS*:0000000000000000 timer.c +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:2 *ABS*:000000000000003f __SREG__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:3 *ABS*:000000000000003e __SP_H__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:4 *ABS*:000000000000003d __SP_L__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:5 *ABS*:0000000000000000 __tmp_reg__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:6 *ABS*:0000000000000001 __zero_reg__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:13 .text:0000000000000000 timer_init + .bss:0000000000000000 _timer_millis +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:58 .text:000000000000003a timer_millis +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:81 .text:000000000000005c timer_micros +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:374 .text:0000000000000244 __vector_14 + +UNDEFINED SYMBOLS +__do_copy_data +__do_clear_bss +__ashldi3 diff --git a/button_debounce/timer.o b/button_debounce/timer.o new file mode 100644 index 0000000..24f4e3c Binary files /dev/null and b/button_debounce/timer.o differ diff --git a/button_debounce/uart_async.lst b/button_debounce/uart_async.lst new file mode 100644 index 0000000..8c86d5e --- /dev/null +++ b/button_debounce/uart_async.lst @@ -0,0 +1,449 @@ + 1 .file "uart_async.c" + 2 __SREG__ = 0x3f + 3 __SP_H__ = 0x3e + 4 __SP_L__ = 0x3d + 5 __tmp_reg__ = 0 + 6 __zero_reg__ = 1 + 7 .global __do_copy_data + 8 .global __do_clear_bss + 9 .text + 10 .Ltext0: + 11 .global uart_init + 13 uart_init: + 14 .LFB1: + 15 .file 1 "uart_async.c" + 1:uart_async.c **** /* Based on Atmel Application Note AVR 306 */ + 2:uart_async.c **** + 3:uart_async.c **** #include + 4:uart_async.c **** #include + 5:uart_async.c **** #include + 6:uart_async.c **** + 7:uart_async.c **** #ifndef BAUD + 8:uart_async.c **** #define BAUD 9600 + 9:uart_async.c **** #endif + 10:uart_async.c **** #include + 11:uart_async.c **** + 12:uart_async.c **** #ifndef UART_RX_BUFFER_SIZE + 13:uart_async.c **** #define UART_RX_BUFFER_SIZE 32 + 14:uart_async.c **** #endif + 15:uart_async.c **** + 16:uart_async.c **** #ifndef UART_TX_BUFFER_SIZE + 17:uart_async.c **** #define UART_TX_BUFFER_SIZE 256 + 18:uart_async.c **** #endif + 19:uart_async.c **** + 20:uart_async.c **** struct tx_ring { + 21:uart_async.c **** int buffer[UART_TX_BUFFER_SIZE]; + 22:uart_async.c **** int start; + 23:uart_async.c **** int end; + 24:uart_async.c **** }; + 25:uart_async.c **** + 26:uart_async.c **** struct rx_ring { + 27:uart_async.c **** int buffer[UART_RX_BUFFER_SIZE]; + 28:uart_async.c **** int start; + 29:uart_async.c **** int end; + 30:uart_async.c **** }; + 31:uart_async.c **** + 32:uart_async.c **** static struct tx_ring tx_buffer; + 33:uart_async.c **** static struct rx_ring rx_buffer; + 34:uart_async.c **** + 35:uart_async.c **** /* http://www.cs.mun.ca/~rod/Winter2007/4723/notes/serial/serial.html */ + 36:uart_async.c **** + 37:uart_async.c **** void uart_init(void) { + 16 .loc 1 37 0 + 17 /* prologue: function */ + 18 /* frame size = 0 */ + 19 /* stack size = 0 */ + 20 .L__stack_usage = 0 + 38:uart_async.c **** + 39:uart_async.c **** tx_buffer.start = 0; + 21 .loc 1 39 0 + 22 0000 1092 0000 sts tx_buffer+512+1,__zero_reg__ + 23 0004 1092 0000 sts tx_buffer+512,__zero_reg__ + 40:uart_async.c **** tx_buffer.end = 0; + 24 .loc 1 40 0 + 25 0008 1092 0000 sts tx_buffer+514+1,__zero_reg__ + 26 000c 1092 0000 sts tx_buffer+514,__zero_reg__ + 41:uart_async.c **** + 42:uart_async.c **** rx_buffer.start = 0; + 27 .loc 1 42 0 + 28 0010 1092 0000 sts rx_buffer+64+1,__zero_reg__ + 29 0014 1092 0000 sts rx_buffer+64,__zero_reg__ + 43:uart_async.c **** rx_buffer.end = 0; + 30 .loc 1 43 0 + 31 0018 1092 0000 sts rx_buffer+66+1,__zero_reg__ + 32 001c 1092 0000 sts rx_buffer+66,__zero_reg__ + 44:uart_async.c **** + 45:uart_async.c **** UBRR0H = UBRRH_VALUE; + 33 .loc 1 45 0 + 34 0020 1092 C500 sts 197,__zero_reg__ + 46:uart_async.c **** UBRR0L = UBRRL_VALUE; + 35 .loc 1 46 0 + 36 0024 87E6 ldi r24,lo8(103) + 37 0026 8093 C400 sts 196,r24 + 47:uart_async.c **** + 48:uart_async.c **** UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); /* 8-bit data */ + 38 .loc 1 48 0 + 39 002a 86E0 ldi r24,lo8(6) + 40 002c 8093 C200 sts 194,r24 + 49:uart_async.c **** UCSR0B = _BV(RXEN0) | _BV(TXEN0); /* Enable RX and TX */ + 41 .loc 1 49 0 + 42 0030 88E1 ldi r24,lo8(24) + 43 0032 8093 C100 sts 193,r24 + 50:uart_async.c **** + 51:uart_async.c **** sei(); + 44 .loc 1 51 0 + 45 /* #APP */ + 46 ; 51 "uart_async.c" 1 + 47 0036 7894 sei + 48 ; 0 "" 2 + 49 /* epilogue start */ + 52:uart_async.c **** } + 50 .loc 1 52 0 + 51 /* #NOAPP */ + 52 0038 0895 ret + 53 .LFE1: + 55 .global uart_putchar + 57 uart_putchar: + 58 .LFB2: + 53:uart_async.c **** + 54:uart_async.c **** int uart_putchar(char c, FILE *stream) { + 59 .loc 1 54 0 + 60 .LVL0: + 61 003a 1F93 push r17 + 62 .LCFI0: + 63 /* prologue: function */ + 64 /* frame size = 0 */ + 65 /* stack size = 1 */ + 66 .L__stack_usage = 1 + 67 003c 182F mov r17,r24 + 55:uart_async.c **** if (c == '\n') { + 68 .loc 1 55 0 + 69 003e 8A30 cpi r24,lo8(10) + 70 0040 01F4 brne .L3 + 71 .LVL1: + 56:uart_async.c **** uart_putchar('\r', stream); + 72 .loc 1 56 0 + 73 0042 8DE0 ldi r24,lo8(13) + 74 0044 0E94 0000 call uart_putchar + 75 .LVL2: + 76 .L3: + 57:uart_async.c **** } + 58:uart_async.c **** + 59:uart_async.c **** int write_pointer = (tx_buffer.end + 1) % UART_TX_BUFFER_SIZE; + 77 .loc 1 59 0 + 78 0048 2091 0000 lds r18,tx_buffer+514 + 79 004c 3091 0000 lds r19,tx_buffer+514+1 + 80 0050 C901 movw r24,r18 + 81 0052 0196 adiw r24,1 + 82 0054 60E0 ldi r22,lo8(256) + 83 0056 71E0 ldi r23,hi8(256) + 84 0058 0E94 0000 call __divmodhi4 + 85 .LVL3: + 60:uart_async.c **** + 61:uart_async.c **** if (write_pointer != tx_buffer.start){ + 86 .loc 1 61 0 + 87 005c 4091 0000 lds r20,tx_buffer+512 + 88 0060 5091 0000 lds r21,tx_buffer+512+1 + 89 0064 8417 cp r24,r20 + 90 0066 9507 cpc r25,r21 + 91 0068 01F0 breq .L4 + 62:uart_async.c **** tx_buffer.buffer[tx_buffer.end] = c; + 92 .loc 1 62 0 + 93 006a F901 movw r30,r18 + 94 006c EE0F lsl r30 + 95 006e FF1F rol r31 + 96 0070 E050 subi r30,lo8(-(tx_buffer)) + 97 0072 F040 sbci r31,hi8(-(tx_buffer)) + 98 0074 1083 st Z,r17 + 99 0076 1182 std Z+1,__zero_reg__ + 63:uart_async.c **** tx_buffer.end = write_pointer; + 100 .loc 1 63 0 + 101 0078 9093 0000 sts tx_buffer+514+1,r25 + 102 007c 8093 0000 sts tx_buffer+514,r24 + 64:uart_async.c **** + 65:uart_async.c **** /* Data available. Enable the transmit interrupt for serial port 0. */ + 66:uart_async.c **** UCSR0B |= _BV(UDRIE0); + 103 .loc 1 66 0 + 104 0080 8091 C100 lds r24,193 + 105 .LVL4: + 106 0084 8062 ori r24,lo8(32) + 107 0086 8093 C100 sts 193,r24 + 108 .LVL5: + 109 .L4: + 67:uart_async.c **** } + 68:uart_async.c **** + 69:uart_async.c **** return 0; + 70:uart_async.c **** } + 110 .loc 1 70 0 + 111 008a 80E0 ldi r24,lo8(0) + 112 008c 90E0 ldi r25,hi8(0) + 113 /* epilogue start */ + 114 008e 1F91 pop r17 + 115 .LVL6: + 116 0090 0895 ret + 117 .LFE2: + 119 .global uart_getchar + 121 uart_getchar: + 122 .LFB3: + 71:uart_async.c **** + 72:uart_async.c **** int uart_getchar(FILE *stream) { + 123 .loc 1 72 0 + 124 .LVL7: + 125 /* prologue: function */ + 126 /* frame size = 0 */ + 127 /* stack size = 0 */ + 128 .L__stack_usage = 0 + 73:uart_async.c **** int read_pointer = (rx_buffer.start + 1) % UART_RX_BUFFER_SIZE; + 129 .loc 1 73 0 + 130 0092 8091 0000 lds r24,rx_buffer+64 + 131 0096 9091 0000 lds r25,rx_buffer+64+1 + 132 .LVL8: + 133 009a 0196 adiw r24,1 + 134 009c 60E2 ldi r22,lo8(32) + 135 009e 70E0 ldi r23,hi8(32) + 136 00a0 0E94 0000 call __divmodhi4 + 137 .LVL9: + 74:uart_async.c **** + 75:uart_async.c **** rx_buffer.start = read_pointer; + 138 .loc 1 75 0 + 139 00a4 9093 0000 sts rx_buffer+64+1,r25 + 140 00a8 8093 0000 sts rx_buffer+64,r24 + 76:uart_async.c **** return rx_buffer.buffer[read_pointer]; + 141 .loc 1 76 0 + 142 00ac FC01 movw r30,r24 + 143 00ae EE0F lsl r30 + 144 00b0 FF1F rol r31 + 145 00b2 E050 subi r30,lo8(-(rx_buffer)) + 146 00b4 F040 sbci r31,hi8(-(rx_buffer)) + 77:uart_async.c **** } + 147 .loc 1 77 0 + 148 00b6 8081 ld r24,Z + 149 .LVL10: + 150 00b8 9181 ldd r25,Z+1 + 151 /* epilogue start */ + 152 00ba 0895 ret + 153 .LFE3: + 155 .global __vector_18 + 157 __vector_18: + 158 .LFB4: + 78:uart_async.c **** + 79:uart_async.c **** ISR(USART_RX_vect) { + 159 .loc 1 79 0 + 160 00bc 1F92 push r1 + 161 .LCFI1: + 162 00be 0F92 push r0 + 163 .LCFI2: + 164 00c0 0FB6 in r0,__SREG__ + 165 00c2 0F92 push r0 + 166 00c4 1124 clr __zero_reg__ + 167 00c6 2F93 push r18 + 168 .LCFI3: + 169 00c8 3F93 push r19 + 170 .LCFI4: + 171 00ca 4F93 push r20 + 172 .LCFI5: + 173 00cc 5F93 push r21 + 174 .LCFI6: + 175 00ce 6F93 push r22 + 176 .LCFI7: + 177 00d0 7F93 push r23 + 178 .LCFI8: + 179 00d2 8F93 push r24 + 180 .LCFI9: + 181 00d4 9F93 push r25 + 182 .LCFI10: + 183 00d6 AF93 push r26 + 184 .LCFI11: + 185 00d8 BF93 push r27 + 186 .LCFI12: + 187 00da EF93 push r30 + 188 .LCFI13: + 189 00dc FF93 push r31 + 190 .LCFI14: + 191 /* prologue: Signal */ + 192 /* frame size = 0 */ + 193 /* stack size = 15 */ + 194 .L__stack_usage = 15 + 80:uart_async.c **** int write_pointer = (rx_buffer.end + 1) % UART_RX_BUFFER_SIZE; + 195 .loc 1 80 0 + 196 00de 2091 0000 lds r18,rx_buffer+66 + 197 00e2 3091 0000 lds r19,rx_buffer+66+1 + 198 00e6 C901 movw r24,r18 + 199 00e8 0196 adiw r24,1 + 200 00ea 60E2 ldi r22,lo8(32) + 201 00ec 70E0 ldi r23,hi8(32) + 202 00ee 0E94 0000 call __divmodhi4 + 203 .LVL11: + 81:uart_async.c **** + 82:uart_async.c **** /* Add next byte to ringbuffer if it has space available. */ + 83:uart_async.c **** if (write_pointer != rx_buffer.start){ + 204 .loc 1 83 0 + 205 00f2 4091 0000 lds r20,rx_buffer+64 + 206 00f6 5091 0000 lds r21,rx_buffer+64+1 + 207 00fa 8417 cp r24,r20 + 208 00fc 9507 cpc r25,r21 + 209 00fe 01F0 breq .L6 + 84:uart_async.c **** rx_buffer.buffer[rx_buffer.end] = UDR0; + 210 .loc 1 84 0 + 211 0100 4091 C600 lds r20,198 + 212 0104 F901 movw r30,r18 + 213 0106 EE0F lsl r30 + 214 0108 FF1F rol r31 + 215 010a E050 subi r30,lo8(-(rx_buffer)) + 216 010c F040 sbci r31,hi8(-(rx_buffer)) + 217 010e 4083 st Z,r20 + 218 0110 1182 std Z+1,__zero_reg__ + 85:uart_async.c **** rx_buffer.end = write_pointer; + 219 .loc 1 85 0 + 220 0112 9093 0000 sts rx_buffer+66+1,r25 + 221 0116 8093 0000 sts rx_buffer+66,r24 + 222 .L6: + 223 /* epilogue start */ + 86:uart_async.c **** } + 87:uart_async.c **** } + 224 .loc 1 87 0 + 225 011a FF91 pop r31 + 226 011c EF91 pop r30 + 227 011e BF91 pop r27 + 228 0120 AF91 pop r26 + 229 0122 9F91 pop r25 + 230 0124 8F91 pop r24 + 231 .LVL12: + 232 0126 7F91 pop r23 + 233 0128 6F91 pop r22 + 234 012a 5F91 pop r21 + 235 012c 4F91 pop r20 + 236 012e 3F91 pop r19 + 237 0130 2F91 pop r18 + 238 0132 0F90 pop r0 + 239 0134 0FBE out __SREG__,r0 + 240 0136 0F90 pop r0 + 241 0138 1F90 pop r1 + 242 013a 1895 reti + 243 .LFE4: + 245 .global __vector_19 + 247 __vector_19: + 248 .LFB5: + 88:uart_async.c **** + 89:uart_async.c **** ISR(USART_UDRE_vect){ + 249 .loc 1 89 0 + 250 013c 1F92 push r1 + 251 .LCFI15: + 252 013e 0F92 push r0 + 253 .LCFI16: + 254 0140 0FB6 in r0,__SREG__ + 255 0142 0F92 push r0 + 256 0144 1124 clr __zero_reg__ + 257 0146 2F93 push r18 + 258 .LCFI17: + 259 0148 3F93 push r19 + 260 .LCFI18: + 261 014a 5F93 push r21 + 262 .LCFI19: + 263 014c 6F93 push r22 + 264 .LCFI20: + 265 014e 7F93 push r23 + 266 .LCFI21: + 267 0150 8F93 push r24 + 268 .LCFI22: + 269 0152 9F93 push r25 + 270 .LCFI23: + 271 0154 AF93 push r26 + 272 .LCFI24: + 273 0156 BF93 push r27 + 274 .LCFI25: + 275 0158 EF93 push r30 + 276 .LCFI26: + 277 015a FF93 push r31 + 278 .LCFI27: + 279 /* prologue: Signal */ + 280 /* frame size = 0 */ + 281 /* stack size = 14 */ + 282 .L__stack_usage = 14 + 90:uart_async.c **** int read_pointer = (tx_buffer.start + 1) % UART_TX_BUFFER_SIZE; + 283 .loc 1 90 0 + 284 015c 8091 0000 lds r24,tx_buffer+512 + 285 0160 9091 0000 lds r25,tx_buffer+512+1 + 286 0164 0196 adiw r24,1 + 287 0166 60E0 ldi r22,lo8(256) + 288 0168 71E0 ldi r23,hi8(256) + 289 016a 0E94 0000 call __divmodhi4 + 290 .LVL13: + 91:uart_async.c **** + 92:uart_async.c **** /* Transmit next byte if data available in ringbuffer. */ + 93:uart_async.c **** if (read_pointer != tx_buffer.end) { + 291 .loc 1 93 0 + 292 016e 2091 0000 lds r18,tx_buffer+514 + 293 0172 3091 0000 lds r19,tx_buffer+514+1 + 294 0176 8217 cp r24,r18 + 295 0178 9307 cpc r25,r19 + 296 017a 01F0 breq .L9 + 94:uart_async.c **** UDR0 = tx_buffer.buffer[read_pointer]; + 297 .loc 1 94 0 + 298 017c FC01 movw r30,r24 + 299 017e EE0F lsl r30 + 300 0180 FF1F rol r31 + 301 0182 E050 subi r30,lo8(-(tx_buffer)) + 302 0184 F040 sbci r31,hi8(-(tx_buffer)) + 303 0186 2081 ld r18,Z + 304 0188 2093 C600 sts 198,r18 + 95:uart_async.c **** tx_buffer.start = read_pointer; + 305 .loc 1 95 0 + 306 018c 9093 0000 sts tx_buffer+512+1,r25 + 307 0190 8093 0000 sts tx_buffer+512,r24 + 308 0194 00C0 rjmp .L8 + 309 .L9: + 96:uart_async.c **** } else { + 97:uart_async.c **** /* Nothing to send. Disable the transmit interrupt for serial port 0. */ + 98:uart_async.c **** UCSR0B &= ~_BV(UDRIE0); + 310 .loc 1 98 0 + 311 0196 8091 C100 lds r24,193 + 312 .LVL14: + 313 019a 8F7D andi r24,lo8(-33) + 314 019c 8093 C100 sts 193,r24 + 315 .L8: + 316 /* epilogue start */ + 99:uart_async.c **** } + 100:uart_async.c **** } + 317 .loc 1 100 0 + 318 01a0 FF91 pop r31 + 319 01a2 EF91 pop r30 + 320 01a4 BF91 pop r27 + 321 01a6 AF91 pop r26 + 322 01a8 9F91 pop r25 + 323 01aa 8F91 pop r24 + 324 01ac 7F91 pop r23 + 325 01ae 6F91 pop r22 + 326 01b0 5F91 pop r21 + 327 01b2 3F91 pop r19 + 328 01b4 2F91 pop r18 + 329 01b6 0F90 pop r0 + 330 01b8 0FBE out __SREG__,r0 + 331 01ba 0F90 pop r0 + 332 01bc 1F90 pop r1 + 333 01be 1895 reti + 334 .LFE5: + 336 .lcomm tx_buffer,516 + 337 .lcomm rx_buffer,68 + 564 .Letext0: + 565 .file 2 "/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdio.h" + 566 .file 3 "/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h" +DEFINED SYMBOLS + *ABS*:0000000000000000 uart_async.c +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:2 *ABS*:000000000000003f __SREG__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:3 *ABS*:000000000000003e __SP_H__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:4 *ABS*:000000000000003d __SP_L__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:5 *ABS*:0000000000000000 __tmp_reg__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:6 *ABS*:0000000000000001 __zero_reg__ +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:13 .text:0000000000000000 uart_init + .bss:0000000000000000 tx_buffer +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:336 .bss:0000000000000204 rx_buffer +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:57 .text:000000000000003a uart_putchar +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:121 .text:0000000000000092 uart_getchar +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:157 .text:00000000000000bc __vector_18 +/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccGlpivZ.s:247 .text:000000000000013c __vector_19 + +UNDEFINED SYMBOLS +__do_copy_data +__do_clear_bss +__divmodhi4 diff --git a/button_debounce/uart_async.o b/button_debounce/uart_async.o new file mode 100644 index 0000000..68a65b6 Binary files /dev/null and b/button_debounce/uart_async.o differ