mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-09 21:51:15 +00:00
Updated folder names
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
DriveControl.d DriveControl.o: .././DriveControl.cpp \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
|
||||
.././Sabertooth.h .././usart_driver.h .././avr_compiler.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
|
||||
.././Misc.h
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
|
||||
|
||||
.././Sabertooth.h:
|
||||
|
||||
.././usart_driver.h:
|
||||
|
||||
.././avr_compiler.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
|
||||
|
||||
.././Misc.h:
|
||||
@@ -0,0 +1 @@
|
||||
:00000001FF
|
||||
Binary file not shown.
@@ -0,0 +1,129 @@
|
||||
:100000000C94B6000C94D3000C94D3000C94D30041
|
||||
:100010000C94D3000C94D3000C94D3000C94D30014
|
||||
:100020000C94D3000C94D3000C94D3000C94D30004
|
||||
:100030000C94D3000C94D3000C9464020C94D30061
|
||||
:100040000C94D3000C94D3000C94D3000C94D300E4
|
||||
:100050000C94D3000C94D3000C94D3000C94D300D4
|
||||
:100060000C94D3000C9418020C943E020C94D30010
|
||||
:100070000C94D3000C94D3000C94D3000C94D300B4
|
||||
:100080000C94D3000C94D3000C94D3000C94D300A4
|
||||
:100090000C94D3000C94D3000C94D3000C94D30094
|
||||
:1000A0000C94D3000C94D3000C94D3000C94D30084
|
||||
:1000B0000C94D3000C94D3000C94D3000C94D30074
|
||||
:1000C0000C94D3000C94D3000C94D3000C94D30064
|
||||
:1000D0000C94D3000C94D3000C94D3000C94D30054
|
||||
:1000E0000C94D3000C94D3000C94D3000C94D30044
|
||||
:1000F0000C94D3000C94D3000C94D3000C94D30034
|
||||
:100100000C94D3000C94D3000C94D3000C94D30023
|
||||
:100110000C94D3000C94D3000C94D3000C94D30013
|
||||
:100120000C94D3000C94D3000C94D3000C94D30003
|
||||
:100130000C94D3000C9481020C94D3000C94D30043
|
||||
:100140000C94D3000C94D3000C94D3000C94D300E3
|
||||
:100150000C94D3000C94D3000C94D3000C94D300D3
|
||||
:100160000C94D3000C94D3000C94D30011241FBE24
|
||||
:10017000CFEFCDBFDFE2DEBF10E2A0E0B0E2E0EF04
|
||||
:10018000F7E002C005900D92A031B107D9F720E247
|
||||
:10019000A0E1B0E201C01D92AE32B207E1F70E94C9
|
||||
:1001A000D5000C94F6030C940000CF93DF93CDB7E9
|
||||
:1001B000DEB76497CDBFDEBF0E94AE02E0E4F6E09A
|
||||
:1001C00088EE818384E0828380E2E0E0F6E082834F
|
||||
:1001D00088E0E0E8F6E081830E94D1022FEF83ED12
|
||||
:1001E00090E3215080409040E1F700C0000040E6DD
|
||||
:1001F00056E060EA79E0CE0141960E947803E0E0A3
|
||||
:10020000F8E037E03083118289E09DE386A397A36D
|
||||
:1002100021E02683E0E0F9E03083118282E19AE771
|
||||
:1002200086A397A32683789480E1E0E0F0E2DE01E4
|
||||
:10023000119601900D928A95E1F7B12C912C00EA6C
|
||||
:1002400018E00F2EF2E78F2EF02D0F2EFBE22F2E4F
|
||||
:10025000F0E23F2EF02D0F2EFAE24F2EF0E25F2E4D
|
||||
:10026000F02D0F2EF9E26F2EF0E27F2EF02D0F2EE3
|
||||
:10027000E12CF6E0FF2EF02D0F2EF0E4CF2EF6E06D
|
||||
:10028000DF2EF02D6894AA24A7F8BB2021F0A1E06E
|
||||
:10029000BA16F1F1B8C09981992361F0FE01329646
|
||||
:1002A000D80111968C91119785FFFACF9C9391916B
|
||||
:1002B0009111F6CFBFEFE3EDF0E3B150E040F04035
|
||||
:1002C000E1F700C0000089E190E20E94B3038823B7
|
||||
:1002D00071F089E190E20E94BB03823741F489E129
|
||||
:1002E00090E20E940B03D8018C92BB24B3948091BE
|
||||
:1002F000142090911520A0911620B0911720809382
|
||||
:10030000102090931120A0931220B09313207BC053
|
||||
:1003100089E190E20E94B303882351F089E190E2E1
|
||||
:100320000E94BB03E92DF0E0E85DFF4D80839394CC
|
||||
:10033000B6E09B123BC089E190E20E940B038091E2
|
||||
:1003400018208823B1F0ECE2F0E29080D1014C91CA
|
||||
:10035000F2016081D3018C910E94F60298120FC0C5
|
||||
:10036000F1014081D2016C91CE0141960E943A0385
|
||||
:1003700006C04FE76FE7CE0141960E943A0340E086
|
||||
:1003800060911820C8010E94F90280911420909178
|
||||
:100390001520A0911620B0911720809310209093E3
|
||||
:1003A0001120A0931220B0931320912C809114203F
|
||||
:1003B00090911520A0911620B09117204091102007
|
||||
:1003C000509111206091122070911320841B950B85
|
||||
:1003D000A60BB70B4597A105B105A8F0CE01419634
|
||||
:1003E0000E9473038091142090911520A0911620F3
|
||||
:1003F000B09117208093102090931120A093122089
|
||||
:10040000B0931320B12CF701808585FF07C0D6017A
|
||||
:100410001696AC9281E08093182037CFF701808543
|
||||
:1004200085FD33CFD6011596AC92109218202DCFB2
|
||||
:100430001F920F920FB60F9211242F933F934F9359
|
||||
:100440005F936F937F938F939F93AF93BF93EF933C
|
||||
:10045000FF9389E190E20E94C703FF91EF91BF9162
|
||||
:10046000AF919F918F917F916F915F914F913F914C
|
||||
:100470002F910F900FBE0F901F9018951F920F9203
|
||||
:100480000FB60F9211242F933F934F935F936F9367
|
||||
:100490007F938F939F93AF93BF93EF93FF9389E1E4
|
||||
:1004A00090E20E94DC03FF91EF91BF91AF919F9189
|
||||
:1004B0008F917F916F915F914F913F912F910F900D
|
||||
:1004C0000FBE0F901F9018951F920F920FB60F92AC
|
||||
:1004D00011248F93EF93FF9380911820882329F0A4
|
||||
:1004E00088E0E0E8F6E0878304C088E0E0E8F6E032
|
||||
:1004F0008583FF91EF918F910F900FBE0F901F900A
|
||||
:1005000018951F920F920FB60F9211248F939F93FD
|
||||
:10051000AF93BF93EF93FF9380E2E0E4F6E087832D
|
||||
:100520008091142090911520A0911620B091172051
|
||||
:100530000196A11DB11D8093142090931520A093C6
|
||||
:100540001620B0931720FF91EF91BF91AF919F912B
|
||||
:100550008F910F900FBE0F901F90189588ED84BF5C
|
||||
:1005600082E080935000E0E5F0E0818181FFFDCFE3
|
||||
:1005700088ED84BF91E09093400084BFE0E5F0E017
|
||||
:10058000808184608083818182FFFDCFE0E5F0E09F
|
||||
:1005900086818D7F8683E0E6F0E0808181608083C4
|
||||
:1005A000089541E060EA78E089E190E20E94AA03C0
|
||||
:1005B000E0911920F0911A2083E0858383818F7C5C
|
||||
:1005C00080618383A0EAB8E08FEC16968C9316972F
|
||||
:1005D00017961C92848180618483848188608483DF
|
||||
:1005E000E0EAF0E0828181608283089564278627B3
|
||||
:1005F0000895FC01818185FFFDCF8FEF808381818C
|
||||
:1006000085FFFDCF440F642B6083818185FFFDCF83
|
||||
:100610008FEF80830895CF93DF93EC0103C0CE0169
|
||||
:100620000E94BB03CE010E94B3038111F8CFDF917A
|
||||
:10063000CF910895DC01ED91FC911197818185FFA7
|
||||
:10064000FDCF80E88083ED91FC911197818185FF3A
|
||||
:10065000FDCF6083ED91FC911197818185FFFDCFE6
|
||||
:100660004083ED91FC91818185FFFDCF640F6F7711
|
||||
:10067000608308950F931F93CF93DF93EC01842F32
|
||||
:100680006F3761F06F3720F44FE7461B61E00BC016
|
||||
:1006900066233CF441E8460F60E005C040E060E0BE
|
||||
:1006A00002C040E060E08F3761F08F3720F40FE741
|
||||
:1006B000081B15E00BC088233CF401E8080F14E088
|
||||
:1006C00005C000E014E002C000E014E0CE010E948A
|
||||
:1006D0001A03402F612FCE010E941A03DF91CF91A0
|
||||
:1006E0001F910F9108954FE76FE70E943A03089515
|
||||
:1006F000CF93DF93EC01688379834A835B8388E03F
|
||||
:10070000FA018183E881F98183E08583E881F981B9
|
||||
:100710008FEC8683E881F9811782E881F9818481F1
|
||||
:1007200088608483FFEF23EC89E0F1502040804013
|
||||
:10073000E1F700C00000E881F9818AEA808344E1A2
|
||||
:100740006EE0CE010E941A03CE010E947303DF9176
|
||||
:10075000CF910895FC0160837183428314861386D0
|
||||
:10076000168615860895FC012385948581E029135A
|
||||
:1007700001C080E00895FC018485DF01A80FB11D50
|
||||
:1007800013968C9194859F5F937094870895FC01D4
|
||||
:1007900083858F5F83709485A081B1812C918917A7
|
||||
:1007A00049F09385DF01A90FB11D13962C93838720
|
||||
:1007B00081E0089580E00895FC0186859585981371
|
||||
:1007C00007C00190F081E02D83818C7F83830895A1
|
||||
:1007D0008685DF01A80FB11D17968C91A081B1818C
|
||||
:1007E0008C9386858F5F837086870895F894FFCFFA
|
||||
:1007F00049443A204D61696E44726976650D0A007C
|
||||
:00000001FF
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,634 @@
|
||||
Archive member included because of file (symbol)
|
||||
|
||||
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o (exit)
|
||||
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
DriveControl.o (__do_copy_data)
|
||||
c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
DriveControl.o (__do_clear_bss)
|
||||
|
||||
Discarded input sections
|
||||
|
||||
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
.text 0x00000000 0x0 DriveControl.o
|
||||
.bss 0x00000000 0x0 DriveControl.o
|
||||
.data.sendArray
|
||||
0x00000000 0x4 DriveControl.o
|
||||
.text 0x00000000 0x0 Misc.o
|
||||
.bss 0x00000000 0x0 Misc.o
|
||||
.text 0x00000000 0x0 Sabertooth.o
|
||||
.bss 0x00000000 0x0 Sabertooth.o
|
||||
.text._ZN10Sabertooth13SaberChecksumEhh
|
||||
0x00000000 0x8 Sabertooth.o
|
||||
.text._ZN10Sabertooth9DriveTestEv
|
||||
0x00000000 0xc6 Sabertooth.o
|
||||
.text._ZN10Sabertooth10ResetSaberEv
|
||||
0x00000000 0x14 Sabertooth.o
|
||||
.text 0x00000000 0x0 usart_driver.o
|
||||
.bss 0x00000000 0x0 usart_driver.o
|
||||
.text.USART_InterruptDriver_DreInterruptLevel_Set
|
||||
0x00000000 0x6 usart_driver.o
|
||||
.text.USART_TXBuffer_FreeSpace
|
||||
0x00000000 0x14 usart_driver.o
|
||||
.text.USART_TXBuffer_PutByte
|
||||
0x00000000 0x38 usart_driver.o
|
||||
.text.USART_NineBits_PutChar
|
||||
0x00000000 0x18 usart_driver.o
|
||||
.text.USART_NineBits_GetChar
|
||||
0x00000000 0x18 usart_driver.o
|
||||
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text.libgcc.mul
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text.libgcc.div
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text.libgcc.prologue
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text.libgcc.builtins
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text.libgcc.fmul
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text.libgcc.fixed
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text.libgcc.mul
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text.libgcc.div
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text.libgcc.prologue
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text.libgcc.builtins
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text.libgcc.fmul
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text.libgcc.fixed
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.text.libgcc.mul
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.text.libgcc.div
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.text.libgcc.prologue
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.text.libgcc.builtins
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.text.libgcc.fmul
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
.text.libgcc.fixed
|
||||
0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
|
||||
Memory Configuration
|
||||
|
||||
Name Origin Length Attributes
|
||||
text 0x00000000 0x00100000 xr
|
||||
data 0x00802000 0x0000ffa0 rw !x
|
||||
eeprom 0x00810000 0x00010000 rw !x
|
||||
fuse 0x00820000 0x00000400 rw !x
|
||||
lock 0x00830000 0x00000400 rw !x
|
||||
signature 0x00840000 0x00000400 rw !x
|
||||
user_signatures 0x00850000 0x00000400 rw !x
|
||||
*default* 0x00000000 0xffffffff
|
||||
|
||||
Linker script and memory map
|
||||
|
||||
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
LOAD DriveControl.o
|
||||
LOAD Misc.o
|
||||
LOAD Sabertooth.o
|
||||
LOAD usart_driver.o
|
||||
START GROUP
|
||||
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a
|
||||
END GROUP
|
||||
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a
|
||||
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a
|
||||
START GROUP
|
||||
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a
|
||||
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a
|
||||
LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a
|
||||
END GROUP
|
||||
|
||||
.hash
|
||||
*(.hash)
|
||||
|
||||
.dynsym
|
||||
*(.dynsym)
|
||||
|
||||
.dynstr
|
||||
*(.dynstr)
|
||||
|
||||
.gnu.version
|
||||
*(.gnu.version)
|
||||
|
||||
.gnu.version_d
|
||||
*(.gnu.version_d)
|
||||
|
||||
.gnu.version_r
|
||||
*(.gnu.version_r)
|
||||
|
||||
.rel.init
|
||||
*(.rel.init)
|
||||
|
||||
.rela.init
|
||||
*(.rela.init)
|
||||
|
||||
.rel.text
|
||||
*(.rel.text)
|
||||
*(.rel.text.*)
|
||||
*(.rel.gnu.linkonce.t*)
|
||||
|
||||
.rela.text
|
||||
*(.rela.text)
|
||||
*(.rela.text.*)
|
||||
*(.rela.gnu.linkonce.t*)
|
||||
|
||||
.rel.fini
|
||||
*(.rel.fini)
|
||||
|
||||
.rela.fini
|
||||
*(.rela.fini)
|
||||
|
||||
.rel.rodata
|
||||
*(.rel.rodata)
|
||||
*(.rel.rodata.*)
|
||||
*(.rel.gnu.linkonce.r*)
|
||||
|
||||
.rela.rodata
|
||||
*(.rela.rodata)
|
||||
*(.rela.rodata.*)
|
||||
*(.rela.gnu.linkonce.r*)
|
||||
|
||||
.rel.data
|
||||
*(.rel.data)
|
||||
*(.rel.data.*)
|
||||
*(.rel.gnu.linkonce.d*)
|
||||
|
||||
.rela.data
|
||||
*(.rela.data)
|
||||
*(.rela.data.*)
|
||||
*(.rela.gnu.linkonce.d*)
|
||||
|
||||
.rel.ctors
|
||||
*(.rel.ctors)
|
||||
|
||||
.rela.ctors
|
||||
*(.rela.ctors)
|
||||
|
||||
.rel.dtors
|
||||
*(.rel.dtors)
|
||||
|
||||
.rela.dtors
|
||||
*(.rela.dtors)
|
||||
|
||||
.rel.got
|
||||
*(.rel.got)
|
||||
|
||||
.rela.got
|
||||
*(.rela.got)
|
||||
|
||||
.rel.bss
|
||||
*(.rel.bss)
|
||||
|
||||
.rela.bss
|
||||
*(.rela.bss)
|
||||
|
||||
.rel.plt
|
||||
*(.rel.plt)
|
||||
|
||||
.rela.plt
|
||||
*(.rela.plt)
|
||||
|
||||
.text 0x00000000 0x7f0
|
||||
*(.vectors)
|
||||
.vectors 0x00000000 0x16c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
0x00000000 __vector_default
|
||||
0x00000000 __vectors
|
||||
*(.vectors)
|
||||
*(.progmem.gcc*)
|
||||
0x0000016c . = ALIGN (0x2)
|
||||
0x0000016c __trampolines_start = .
|
||||
*(.trampolines)
|
||||
.trampolines 0x0000016c 0x0 linker stubs
|
||||
*(.trampolines*)
|
||||
0x0000016c __trampolines_end = .
|
||||
*(.progmem*)
|
||||
0x0000016c . = ALIGN (0x2)
|
||||
*(.jumptables)
|
||||
*(.jumptables*)
|
||||
*(.lowtext)
|
||||
*(.lowtext*)
|
||||
0x0000016c __ctors_start = .
|
||||
*(.ctors)
|
||||
0x0000016c __ctors_end = .
|
||||
0x0000016c __dtors_start = .
|
||||
*(.dtors)
|
||||
0x0000016c __dtors_end = .
|
||||
SORT(*)(.ctors)
|
||||
SORT(*)(.dtors)
|
||||
*(.init0)
|
||||
.init0 0x0000016c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
0x0000016c __init
|
||||
*(.init0)
|
||||
*(.init1)
|
||||
*(.init1)
|
||||
*(.init2)
|
||||
.init2 0x0000016c 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
*(.init2)
|
||||
*(.init3)
|
||||
*(.init3)
|
||||
*(.init4)
|
||||
.init4 0x00000178 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
0x00000178 __do_copy_data
|
||||
.init4 0x0000018e 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
0x0000018e __do_clear_bss
|
||||
*(.init4)
|
||||
*(.init5)
|
||||
*(.init5)
|
||||
*(.init6)
|
||||
*(.init6)
|
||||
*(.init7)
|
||||
*(.init7)
|
||||
*(.init8)
|
||||
*(.init8)
|
||||
*(.init9)
|
||||
.init9 0x0000019e 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
*(.init9)
|
||||
*(.text)
|
||||
.text 0x000001a6 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
0x000001a6 __vector_38
|
||||
0x000001a6 __vector_22
|
||||
0x000001a6 __vector_63
|
||||
0x000001a6 __vector_28
|
||||
0x000001a6 __vector_67
|
||||
0x000001a6 __vector_1
|
||||
0x000001a6 __vector_32
|
||||
0x000001a6 __vector_75
|
||||
0x000001a6 __vector_71
|
||||
0x000001a6 __vector_34
|
||||
0x000001a6 __vector_62
|
||||
0x000001a6 __vector_24
|
||||
0x000001a6 __vector_12
|
||||
0x000001a6 __vector_55
|
||||
0x000001a6 __vector_69
|
||||
0x000001a6 __vector_81
|
||||
0x000001a6 __vector_90
|
||||
0x000001a6 __vector_46
|
||||
0x000001a6 __bad_interrupt
|
||||
0x000001a6 __vector_72
|
||||
0x000001a6 __vector_6
|
||||
0x000001a6 __vector_31
|
||||
0x000001a6 __vector_35
|
||||
0x000001a6 __vector_78
|
||||
0x000001a6 __vector_74
|
||||
0x000001a6 __vector_39
|
||||
0x000001a6 __vector_3
|
||||
0x000001a6 __vector_23
|
||||
0x000001a6 __vector_68
|
||||
0x000001a6 __vector_30
|
||||
0x000001a6 __vector_73
|
||||
0x000001a6 __vector_45
|
||||
0x000001a6 __vector_61
|
||||
0x000001a6 __vector_11
|
||||
0x000001a6 __vector_54
|
||||
0x000001a6 __vector_13
|
||||
0x000001a6 __vector_17
|
||||
0x000001a6 __vector_19
|
||||
0x000001a6 __vector_56
|
||||
0x000001a6 __vector_7
|
||||
0x000001a6 __vector_49
|
||||
0x000001a6 __vector_41
|
||||
0x000001a6 __vector_86
|
||||
0x000001a6 __vector_64
|
||||
0x000001a6 __vector_88
|
||||
0x000001a6 __vector_43
|
||||
0x000001a6 __vector_27
|
||||
0x000001a6 __vector_5
|
||||
0x000001a6 __vector_33
|
||||
0x000001a6 __vector_76
|
||||
0x000001a6 __vector_47
|
||||
0x000001a6 __vector_52
|
||||
0x000001a6 __vector_37
|
||||
0x000001a6 __vector_89
|
||||
0x000001a6 __vector_4
|
||||
0x000001a6 __vector_44
|
||||
0x000001a6 __vector_82
|
||||
0x000001a6 __vector_51
|
||||
0x000001a6 __vector_9
|
||||
0x000001a6 __vector_2
|
||||
0x000001a6 __vector_21
|
||||
0x000001a6 __vector_15
|
||||
0x000001a6 __vector_66
|
||||
0x000001a6 __vector_36
|
||||
0x000001a6 __vector_79
|
||||
0x000001a6 __vector_58
|
||||
0x000001a6 __vector_70
|
||||
0x000001a6 __vector_83
|
||||
0x000001a6 __vector_29
|
||||
0x000001a6 __vector_60
|
||||
0x000001a6 __vector_40
|
||||
0x000001a6 __vector_85
|
||||
0x000001a6 __vector_8
|
||||
0x000001a6 __vector_48
|
||||
0x000001a6 __vector_80
|
||||
0x000001a6 __vector_84
|
||||
0x000001a6 __vector_57
|
||||
0x000001a6 __vector_53
|
||||
0x000001a6 __vector_10
|
||||
0x000001a6 __vector_50
|
||||
0x000001a6 __vector_16
|
||||
0x000001a6 __vector_59
|
||||
0x000001a6 __vector_18
|
||||
0x000001a6 __vector_20
|
||||
0x000001a6 __vector_42
|
||||
0x000001a6 __vector_87
|
||||
0x000001a6 __vector_65
|
||||
0x000001aa . = ALIGN (0x2)
|
||||
*(.text.*)
|
||||
.text.main 0x000001aa 0x286 DriveControl.o
|
||||
0x000001aa main
|
||||
.text.__vector_25
|
||||
0x00000430 0x4c DriveControl.o
|
||||
0x00000430 __vector_25
|
||||
.text.__vector_26
|
||||
0x0000047c 0x4c DriveControl.o
|
||||
0x0000047c __vector_26
|
||||
.text.__vector_14
|
||||
0x000004c8 0x3a DriveControl.o
|
||||
0x000004c8 __vector_14
|
||||
.text.__vector_77
|
||||
0x00000502 0x5a DriveControl.o
|
||||
0x00000502 __vector_77
|
||||
.text._Z23SetXMEGA32MhzCalibratedv
|
||||
0x0000055c 0x46 Misc.o
|
||||
0x0000055c _Z23SetXMEGA32MhzCalibratedv
|
||||
.text._Z12SetupPCCommsv
|
||||
0x000005a2 0x4a Misc.o
|
||||
0x000005a2 _Z12SetupPCCommsv
|
||||
.text._Z14PCComsChecksumhhh
|
||||
0x000005ec 0x6 Misc.o
|
||||
0x000005ec _Z14PCComsChecksumhhh
|
||||
.text._Z22SendDriveControlStatusP12USART_structbb
|
||||
0x000005f2 0x24 Misc.o
|
||||
0x000005f2 _Z22SendDriveControlStatusP12USART_structbb
|
||||
.text._Z17FlushSerialBufferP16Usart_and_buffer
|
||||
0x00000616 0x1e Misc.o
|
||||
0x00000616 _Z17FlushSerialBufferP16Usart_and_buffer
|
||||
.text._ZN10Sabertooth12SendDriveCmdEcc
|
||||
0x00000634 0x40 Sabertooth.o
|
||||
0x00000634 _ZN10Sabertooth12SendDriveCmdEcc
|
||||
.text._ZN10Sabertooth11ParsePacketEhh
|
||||
0x00000674 0x72 Sabertooth.o
|
||||
0x00000674 _ZN10Sabertooth11ParsePacketEhh
|
||||
.text._ZN10Sabertooth7StopAllEv
|
||||
0x000006e6 0xa Sabertooth.o
|
||||
0x000006e6 _ZN10Sabertooth7StopAllEv
|
||||
.text._ZN10SabertoothC2EP12USART_structP11PORT_struct
|
||||
0x000006f0 0x64 Sabertooth.o
|
||||
0x000006f0 _ZN10SabertoothC1EP12USART_structP11PORT_struct
|
||||
0x000006f0 _ZN10SabertoothC2EP12USART_structP11PORT_struct
|
||||
.text.USART_InterruptDriver_Initialize
|
||||
0x00000754 0x12 usart_driver.o
|
||||
0x00000754 USART_InterruptDriver_Initialize
|
||||
.text.USART_RXBufferData_Available
|
||||
0x00000766 0x10 usart_driver.o
|
||||
0x00000766 USART_RXBufferData_Available
|
||||
.text.USART_RXBuffer_GetByte
|
||||
0x00000776 0x18 usart_driver.o
|
||||
0x00000776 USART_RXBuffer_GetByte
|
||||
.text.USART_RXComplete
|
||||
0x0000078e 0x2a usart_driver.o
|
||||
0x0000078e USART_RXComplete
|
||||
.text.USART_DataRegEmpty
|
||||
0x000007b8 0x34 usart_driver.o
|
||||
0x000007b8 USART_DataRegEmpty
|
||||
0x000007ec . = ALIGN (0x2)
|
||||
*(.fini9)
|
||||
.fini9 0x000007ec 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
0x000007ec _exit
|
||||
0x000007ec exit
|
||||
*(.fini9)
|
||||
*(.fini8)
|
||||
*(.fini8)
|
||||
*(.fini7)
|
||||
*(.fini7)
|
||||
*(.fini6)
|
||||
*(.fini6)
|
||||
*(.fini5)
|
||||
*(.fini5)
|
||||
*(.fini4)
|
||||
*(.fini4)
|
||||
*(.fini3)
|
||||
*(.fini3)
|
||||
*(.fini2)
|
||||
*(.fini2)
|
||||
*(.fini1)
|
||||
*(.fini1)
|
||||
*(.fini0)
|
||||
.fini0 0x000007ec 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
*(.fini0)
|
||||
0x000007f0 _etext = .
|
||||
|
||||
.data 0x00802000 0x10 load address 0x000007f0
|
||||
0x00802000 PROVIDE (__data_start, .)
|
||||
*(.data)
|
||||
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32d4.o
|
||||
.data 0x00802000 0x0 DriveControl.o
|
||||
.data 0x00802000 0x0 Misc.o
|
||||
.data 0x00802000 0x0 Sabertooth.o
|
||||
.data 0x00802000 0x0 usart_driver.o
|
||||
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o)
|
||||
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o)
|
||||
.data 0x00802000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1051/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o)
|
||||
*(.data*)
|
||||
*(.rodata)
|
||||
*(.rodata*)
|
||||
.rodata.str1.1
|
||||
0x00802000 0x10 DriveControl.o
|
||||
*(.gnu.linkonce.d*)
|
||||
0x00802010 . = ALIGN (0x2)
|
||||
0x00802010 _edata = .
|
||||
0x00802010 PROVIDE (__data_end, .)
|
||||
|
||||
.bss 0x00802010 0x1e
|
||||
0x00802010 PROVIDE (__bss_start, .)
|
||||
*(.bss)
|
||||
*(.bss*)
|
||||
.bss.TimePrevious
|
||||
0x00802010 0x4 DriveControl.o
|
||||
0x00802010 TimePrevious
|
||||
.bss.TimeSinceInit
|
||||
0x00802014 0x4 DriveControl.o
|
||||
0x00802014 TimeSinceInit
|
||||
.bss.IsRoving 0x00802018 0x1 DriveControl.o
|
||||
0x00802018 IsRoving
|
||||
.bss.USART_PC_Data
|
||||
0x00802019 0xf DriveControl.o
|
||||
0x00802019 USART_PC_Data
|
||||
.bss.receiveArray
|
||||
0x00802028 0x6 DriveControl.o
|
||||
0x00802028 receiveArray
|
||||
*(COMMON)
|
||||
0x0080202e PROVIDE (__bss_end, .)
|
||||
0x000007f0 __data_load_start = LOADADDR (.data)
|
||||
0x00000800 __data_load_end = (__data_load_start + SIZEOF (.data))
|
||||
|
||||
.noinit 0x0080202e 0x0
|
||||
0x0080202e PROVIDE (__noinit_start, .)
|
||||
*(.noinit*)
|
||||
0x0080202e PROVIDE (__noinit_end, .)
|
||||
0x0080202e _end = .
|
||||
0x0080202e PROVIDE (__heap_start, .)
|
||||
|
||||
.eeprom 0x00810000 0x0
|
||||
*(.eeprom*)
|
||||
0x00810000 __eeprom_end = .
|
||||
|
||||
.fuse
|
||||
*(.fuse)
|
||||
*(.lfuse)
|
||||
*(.hfuse)
|
||||
*(.efuse)
|
||||
|
||||
.lock
|
||||
*(.lock*)
|
||||
|
||||
.signature
|
||||
*(.signature*)
|
||||
|
||||
.user_signatures
|
||||
*(.user_signatures*)
|
||||
|
||||
.stab
|
||||
*(.stab)
|
||||
|
||||
.stabstr
|
||||
*(.stabstr)
|
||||
|
||||
.stab.excl
|
||||
*(.stab.excl)
|
||||
|
||||
.stab.exclstr
|
||||
*(.stab.exclstr)
|
||||
|
||||
.stab.index
|
||||
*(.stab.index)
|
||||
|
||||
.stab.indexstr
|
||||
*(.stab.indexstr)
|
||||
|
||||
.comment 0x00000000 0x30
|
||||
*(.comment)
|
||||
.comment 0x00000000 0x30 DriveControl.o
|
||||
0x31 (size before relaxing)
|
||||
.comment 0x00000000 0x31 Misc.o
|
||||
.comment 0x00000000 0x31 Sabertooth.o
|
||||
.comment 0x00000000 0x31 usart_driver.o
|
||||
|
||||
.note.gnu.build-id
|
||||
*(.note.gnu.build-id)
|
||||
|
||||
.debug
|
||||
*(.debug)
|
||||
|
||||
.line
|
||||
*(.line)
|
||||
|
||||
.debug_srcinfo
|
||||
*(.debug_srcinfo)
|
||||
|
||||
.debug_sfnames
|
||||
*(.debug_sfnames)
|
||||
|
||||
.debug_aranges 0x00000000 0x138
|
||||
*(.debug_aranges)
|
||||
.debug_aranges
|
||||
0x00000000 0x40 DriveControl.o
|
||||
.debug_aranges
|
||||
0x00000040 0x40 Misc.o
|
||||
.debug_aranges
|
||||
0x00000080 0x50 Sabertooth.o
|
||||
.debug_aranges
|
||||
0x000000d0 0x68 usart_driver.o
|
||||
|
||||
.debug_pubnames
|
||||
*(.debug_pubnames)
|
||||
|
||||
.debug_info 0x00000000 0x2608
|
||||
*(.debug_info .gnu.linkonce.wi.*)
|
||||
.debug_info 0x00000000 0x1087 DriveControl.o
|
||||
.debug_info 0x00001087 0x621 Misc.o
|
||||
.debug_info 0x000016a8 0x9da Sabertooth.o
|
||||
.debug_info 0x00002082 0x586 usart_driver.o
|
||||
|
||||
.debug_abbrev 0x00000000 0xa6e
|
||||
*(.debug_abbrev)
|
||||
.debug_abbrev 0x00000000 0x3a9 DriveControl.o
|
||||
.debug_abbrev 0x000003a9 0x1d5 Misc.o
|
||||
.debug_abbrev 0x0000057e 0x2ed Sabertooth.o
|
||||
.debug_abbrev 0x0000086b 0x203 usart_driver.o
|
||||
|
||||
.debug_line 0x00000000 0x91e
|
||||
*(.debug_line .debug_line.* .debug_line_end)
|
||||
.debug_line 0x00000000 0x283 DriveControl.o
|
||||
.debug_line 0x00000283 0x1b1 Misc.o
|
||||
.debug_line 0x00000434 0x2eb Sabertooth.o
|
||||
.debug_line 0x0000071f 0x1ff usart_driver.o
|
||||
|
||||
.debug_frame 0x00000000 0x330
|
||||
*(.debug_frame)
|
||||
.debug_frame 0x00000000 0x148 DriveControl.o
|
||||
.debug_frame 0x00000148 0x70 Misc.o
|
||||
.debug_frame 0x000001b8 0xb4 Sabertooth.o
|
||||
.debug_frame 0x0000026c 0xc4 usart_driver.o
|
||||
|
||||
.debug_str 0x00000000 0x10d0
|
||||
*(.debug_str)
|
||||
.debug_str 0x00000000 0xbb8 DriveControl.o
|
||||
0xc41 (size before relaxing)
|
||||
.debug_str 0x00000bb8 0x2e2 Misc.o
|
||||
0x73c (size before relaxing)
|
||||
.debug_str 0x00000e9a 0x9c Sabertooth.o
|
||||
0x51f (size before relaxing)
|
||||
.debug_str 0x00000f36 0x19a usart_driver.o
|
||||
0x478 (size before relaxing)
|
||||
|
||||
.debug_loc 0x00000000 0xe3a
|
||||
*(.debug_loc)
|
||||
.debug_loc 0x00000000 0x3ca DriveControl.o
|
||||
.debug_loc 0x000003ca 0x111 Misc.o
|
||||
.debug_loc 0x000004db 0x570 Sabertooth.o
|
||||
.debug_loc 0x00000a4b 0x3ef usart_driver.o
|
||||
|
||||
.debug_macinfo
|
||||
*(.debug_macinfo)
|
||||
|
||||
.debug_weaknames
|
||||
*(.debug_weaknames)
|
||||
|
||||
.debug_funcnames
|
||||
*(.debug_funcnames)
|
||||
|
||||
.debug_typenames
|
||||
*(.debug_typenames)
|
||||
|
||||
.debug_varnames
|
||||
*(.debug_varnames)
|
||||
|
||||
.debug_pubtypes
|
||||
*(.debug_pubtypes)
|
||||
|
||||
.debug_ranges 0x00000000 0xf8
|
||||
*(.debug_ranges)
|
||||
.debug_ranges 0x00000000 0x30 DriveControl.o
|
||||
.debug_ranges 0x00000030 0x30 Misc.o
|
||||
.debug_ranges 0x00000060 0x40 Sabertooth.o
|
||||
.debug_ranges 0x000000a0 0x58 usart_driver.o
|
||||
|
||||
.debug_macro
|
||||
*(.debug_macro)
|
||||
OUTPUT(DriveControl.elf elf32-avr)
|
||||
LOAD linker stubs
|
||||
Binary file not shown.
@@ -0,0 +1,130 @@
|
||||
S01400004472697665436F6E74726F6C2E7372656335
|
||||
S11300000C94B6000C94D3000C94D3000C94D3003D
|
||||
S11300100C94D3000C94D3000C94D3000C94D30010
|
||||
S11300200C94D3000C94D3000C94D3000C94D30000
|
||||
S11300300C94D3000C94D3000C9464020C94D3005D
|
||||
S11300400C94D3000C94D3000C94D3000C94D300E0
|
||||
S11300500C94D3000C94D3000C94D3000C94D300D0
|
||||
S11300600C94D3000C9418020C943E020C94D3000C
|
||||
S11300700C94D3000C94D3000C94D3000C94D300B0
|
||||
S11300800C94D3000C94D3000C94D3000C94D300A0
|
||||
S11300900C94D3000C94D3000C94D3000C94D30090
|
||||
S11300A00C94D3000C94D3000C94D3000C94D30080
|
||||
S11300B00C94D3000C94D3000C94D3000C94D30070
|
||||
S11300C00C94D3000C94D3000C94D3000C94D30060
|
||||
S11300D00C94D3000C94D3000C94D3000C94D30050
|
||||
S11300E00C94D3000C94D3000C94D3000C94D30040
|
||||
S11300F00C94D3000C94D3000C94D3000C94D30030
|
||||
S11301000C94D3000C94D3000C94D3000C94D3001F
|
||||
S11301100C94D3000C94D3000C94D3000C94D3000F
|
||||
S11301200C94D3000C94D3000C94D3000C94D300FF
|
||||
S11301300C94D3000C9481020C94D3000C94D3003F
|
||||
S11301400C94D3000C94D3000C94D3000C94D300DF
|
||||
S11301500C94D3000C94D3000C94D3000C94D300CF
|
||||
S11301600C94D3000C94D3000C94D30011241FBE20
|
||||
S1130170CFEFCDBFDFE2DEBF10E2A0E0B0E2E0EF00
|
||||
S1130180F7E002C005900D92A031B107D9F720E243
|
||||
S1130190A0E1B0E201C01D92AE32B207E1F70E94C5
|
||||
S11301A0D5000C94F6030C940000CF93DF93CDB7E5
|
||||
S11301B0DEB76497CDBFDEBF0E94AE02E0E4F6E096
|
||||
S11301C088EE818384E0828380E2E0E0F6E082834B
|
||||
S11301D088E0E0E8F6E081830E94D1022FEF83ED0E
|
||||
S11301E090E3215080409040E1F700C0000040E6D9
|
||||
S11301F056E060EA79E0CE0141960E947803E0E09F
|
||||
S1130200F8E037E03083118289E09DE386A397A369
|
||||
S113021021E02683E0E0F9E03083118282E19AE76D
|
||||
S113022086A397A32683789480E1E0E0F0E2DE01E0
|
||||
S1130230119601900D928A95E1F7B12C912C00EA68
|
||||
S113024018E00F2EF2E78F2EF02D0F2EFBE22F2E4B
|
||||
S1130250F0E23F2EF02D0F2EFAE24F2EF0E25F2E49
|
||||
S1130260F02D0F2EF9E26F2EF0E27F2EF02D0F2EDF
|
||||
S1130270E12CF6E0FF2EF02D0F2EF0E4CF2EF6E069
|
||||
S1130280DF2EF02D6894AA24A7F8BB2021F0A1E06A
|
||||
S1130290BA16F1F1B8C09981992361F0FE01329642
|
||||
S11302A0D80111968C91119785FFFACF9C93919167
|
||||
S11302B09111F6CFBFEFE3EDF0E3B150E040F04031
|
||||
S11302C0E1F700C0000089E190E20E94B3038823B3
|
||||
S11302D071F089E190E20E94BB03823741F489E125
|
||||
S11302E090E20E940B03D8018C92BB24B3948091BA
|
||||
S11302F0142090911520A0911620B091172080937E
|
||||
S1130300102090931120A0931220B09313207BC04F
|
||||
S113031089E190E20E94B303882351F089E190E2DD
|
||||
S11303200E94BB03E92DF0E0E85DFF4D80839394C8
|
||||
S1130330B6E09B123BC089E190E20E940B038091DE
|
||||
S113034018208823B1F0ECE2F0E29080D1014C91C6
|
||||
S1130350F2016081D3018C910E94F60298120FC0C1
|
||||
S1130360F1014081D2016C91CE0141960E943A0381
|
||||
S113037006C04FE76FE7CE0141960E943A0340E082
|
||||
S113038060911820C8010E94F90280911420909174
|
||||
S11303901520A0911620B0911720809310209093DF
|
||||
S11303A01120A0931220B0931320912C809114203B
|
||||
S11303B090911520A0911620B09117204091102003
|
||||
S11303C0509111206091122070911320841B950B81
|
||||
S11303D0A60BB70B4597A105B105A8F0CE01419630
|
||||
S11303E00E9473038091142090911520A0911620EF
|
||||
S11303F0B09117208093102090931120A093122085
|
||||
S1130400B0931320B12CF701808585FF07C0D60176
|
||||
S11304101696AC9281E08093182037CFF70180853F
|
||||
S113042085FD33CFD6011596AC92109218202DCFAE
|
||||
S11304301F920F920FB60F9211242F933F934F9355
|
||||
S11304405F936F937F938F939F93AF93BF93EF9338
|
||||
S1130450FF9389E190E20E94C703FF91EF91BF915E
|
||||
S1130460AF919F918F917F916F915F914F913F9148
|
||||
S11304702F910F900FBE0F901F9018951F920F92FF
|
||||
S11304800FB60F9211242F933F934F935F936F9363
|
||||
S11304907F938F939F93AF93BF93EF93FF9389E1E0
|
||||
S11304A090E20E94DC03FF91EF91BF91AF919F9185
|
||||
S11304B08F917F916F915F914F913F912F910F9009
|
||||
S11304C00FBE0F901F9018951F920F920FB60F92A8
|
||||
S11304D011248F93EF93FF9380911820882329F0A0
|
||||
S11304E088E0E0E8F6E0878304C088E0E0E8F6E02E
|
||||
S11304F08583FF91EF918F910F900FBE0F901F9006
|
||||
S113050018951F920F920FB60F9211248F939F93F9
|
||||
S1130510AF93BF93EF93FF9380E2E0E4F6E0878329
|
||||
S11305208091142090911520A0911620B09117204D
|
||||
S11305300196A11DB11D8093142090931520A093C2
|
||||
S11305401620B0931720FF91EF91BF91AF919F9127
|
||||
S11305508F910F900FBE0F901F90189588ED84BF58
|
||||
S113056082E080935000E0E5F0E0818181FFFDCFDF
|
||||
S113057088ED84BF91E09093400084BFE0E5F0E013
|
||||
S1130580808184608083818182FFFDCFE0E5F0E09B
|
||||
S113059086818D7F8683E0E6F0E0808181608083C0
|
||||
S11305A0089541E060EA78E089E190E20E94AA03BC
|
||||
S11305B0E0911920F0911A2083E0858383818F7C58
|
||||
S11305C080618383A0EAB8E08FEC16968C9316972B
|
||||
S11305D017961C92848180618483848188608483DB
|
||||
S11305E0E0EAF0E0828181608283089564278627AF
|
||||
S11305F00895FC01818185FFFDCF8FEF8083818188
|
||||
S113060085FFFDCF440F642B6083818185FFFDCF7F
|
||||
S11306108FEF80830895CF93DF93EC0103C0CE0165
|
||||
S11306200E94BB03CE010E94B3038111F8CFDF9176
|
||||
S1130630CF910895DC01ED91FC911197818185FFA3
|
||||
S1130640FDCF80E88083ED91FC911197818185FF36
|
||||
S1130650FDCF6083ED91FC911197818185FFFDCFE2
|
||||
S11306604083ED91FC91818185FFFDCF640F6F770D
|
||||
S1130670608308950F931F93CF93DF93EC01842F2E
|
||||
S11306806F3761F06F3720F44FE7461B61E00BC012
|
||||
S113069066233CF441E8460F60E005C040E060E0BA
|
||||
S11306A002C040E060E08F3761F08F3720F40FE73D
|
||||
S11306B0081B15E00BC088233CF401E8080F14E084
|
||||
S11306C005C000E014E002C000E014E0CE010E9486
|
||||
S11306D01A03402F612FCE010E941A03DF91CF919C
|
||||
S11306E01F910F9108954FE76FE70E943A03089511
|
||||
S11306F0CF93DF93EC01688379834A835B8388E03B
|
||||
S1130700FA018183E881F98183E08583E881F981B5
|
||||
S11307108FEC8683E881F9811782E881F9818481ED
|
||||
S113072088608483FFEF23EC89E0F150204080400F
|
||||
S1130730E1F700C00000E881F9818AEA808344E19E
|
||||
S11307406EE0CE010E941A03CE010E947303DF9172
|
||||
S1130750CF910895FC0160837183428314861386CC
|
||||
S1130760168615860895FC012385948581E0291356
|
||||
S113077001C080E00895FC018485DF01A80FB11D4C
|
||||
S113078013968C9194859F5F937094870895FC01D0
|
||||
S113079083858F5F83709485A081B1812C918917A3
|
||||
S11307A049F09385DF01A90FB11D13962C9383871C
|
||||
S11307B081E0089580E00895FC018685958598136D
|
||||
S11307C007C00190F081E02D83818C7F838308959D
|
||||
S11307D08685DF01A80FB11D17968C91A081B18188
|
||||
S11307E08C9386858F5F837086870895F894FFCFF6
|
||||
S11307F049443A204D61696E44726976650D0A0078
|
||||
S9030000FC
|
||||
@@ -0,0 +1,153 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
################################################################################
|
||||
|
||||
SHELL := cmd.exe
|
||||
RM := rm -rf
|
||||
|
||||
USER_OBJS :=
|
||||
|
||||
LIBS :=
|
||||
PROJ :=
|
||||
|
||||
O_SRCS :=
|
||||
C_SRCS :=
|
||||
S_SRCS :=
|
||||
S_UPPER_SRCS :=
|
||||
OBJ_SRCS :=
|
||||
ASM_SRCS :=
|
||||
PREPROCESSING_SRCS :=
|
||||
OBJS :=
|
||||
OBJS_AS_ARGS :=
|
||||
C_DEPS :=
|
||||
C_DEPS_AS_ARGS :=
|
||||
EXECUTABLES :=
|
||||
OUTPUT_FILE_PATH :=
|
||||
OUTPUT_FILE_PATH_AS_ARGS :=
|
||||
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
|
||||
QUOTE := "
|
||||
ADDITIONAL_DEPENDENCIES:=
|
||||
OUTPUT_FILE_DEP:=
|
||||
LIB_DEP:=
|
||||
|
||||
# Every subdirectory with source files must be described here
|
||||
SUBDIRS :=
|
||||
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
C_SRCS += \
|
||||
../DriveControl.cpp \
|
||||
../Misc.cpp \
|
||||
../Sabertooth.cpp \
|
||||
../usart_driver.c
|
||||
|
||||
|
||||
PREPROCESSING_SRCS +=
|
||||
|
||||
|
||||
ASM_SRCS +=
|
||||
|
||||
|
||||
OBJS += \
|
||||
DriveControl.o \
|
||||
Misc.o \
|
||||
Sabertooth.o \
|
||||
usart_driver.o
|
||||
|
||||
OBJS_AS_ARGS += \
|
||||
DriveControl.o \
|
||||
Misc.o \
|
||||
Sabertooth.o \
|
||||
usart_driver.o
|
||||
|
||||
C_DEPS += \
|
||||
DriveControl.d \
|
||||
Misc.d \
|
||||
Sabertooth.d \
|
||||
usart_driver.d
|
||||
|
||||
C_DEPS_AS_ARGS += \
|
||||
DriveControl.d \
|
||||
Misc.d \
|
||||
Sabertooth.d \
|
||||
usart_driver.d
|
||||
|
||||
OUTPUT_FILE_PATH +=DriveControl.elf
|
||||
|
||||
OUTPUT_FILE_PATH_AS_ARGS +=DriveControl.elf
|
||||
|
||||
ADDITIONAL_DEPENDENCIES:=
|
||||
|
||||
OUTPUT_FILE_DEP:= ./makedep.mk
|
||||
|
||||
LIB_DEP+=
|
||||
|
||||
# AVR32/GNU C Compiler
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
./%.o: .././%.c
|
||||
@echo Building file: $<
|
||||
@echo Invoking: AVR8/GNU C Compiler : 4.8.1
|
||||
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atxmega32d4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
|
||||
@echo Finished building: $<
|
||||
|
||||
|
||||
./%.o: .././%.cpp
|
||||
@echo Building file: $<
|
||||
@echo Invoking: AVR8/GNU C Compiler : 4.8.1
|
||||
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atxmega32d4 -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
|
||||
@echo Finished building: $<
|
||||
|
||||
|
||||
|
||||
|
||||
# AVR32/GNU Preprocessing Assembler
|
||||
|
||||
|
||||
|
||||
# AVR32/GNU Assembler
|
||||
|
||||
|
||||
|
||||
|
||||
ifneq ($(MAKECMDGOALS),clean)
|
||||
ifneq ($(strip $(C_DEPS)),)
|
||||
-include $(C_DEPS)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
|
||||
# All Target
|
||||
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
|
||||
|
||||
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP)
|
||||
@echo Building target: $@
|
||||
@echo Invoking: AVR8/GNU Linker : 4.8.1
|
||||
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="DriveControl.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atxmega32d4
|
||||
@echo Finished building target: $@
|
||||
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "DriveControl.elf" "DriveControl.hex"
|
||||
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "DriveControl.elf" "DriveControl.eep" || exit 0
|
||||
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "DriveControl.elf" > "DriveControl.lss"
|
||||
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "DriveControl.elf" "DriveControl.srec"
|
||||
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1051\avr8-gnu-toolchain\bin\avr-size.exe" "DriveControl.elf"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Other Targets
|
||||
clean:
|
||||
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
|
||||
-$(RM) $(C_DEPS_AS_ARGS)
|
||||
rm -rf "DriveControl.elf" "DriveControl.a" "DriveControl.hex" "DriveControl.lss" "DriveControl.eep" "DriveControl.map" "DriveControl.srec" "DriveControl.usersignatures"
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
Misc.d Misc.o: .././Misc.cpp .././Misc.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
|
||||
.././usart_driver.h .././avr_compiler.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h
|
||||
|
||||
.././Misc.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
|
||||
|
||||
.././usart_driver.h:
|
||||
|
||||
.././avr_compiler.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
|
||||
Binary file not shown.
@@ -0,0 +1,68 @@
|
||||
Sabertooth.d Sabertooth.o: .././Sabertooth.cpp .././Sabertooth.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h \
|
||||
.././usart_driver.h .././avr_compiler.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h
|
||||
|
||||
.././Sabertooth.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
|
||||
|
||||
.././usart_driver.h:
|
||||
|
||||
.././avr_compiler.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
|
||||
Binary file not shown.
@@ -0,0 +1,12 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit or delete the file
|
||||
################################################################################
|
||||
|
||||
DriveControl.cpp
|
||||
|
||||
Misc.cpp
|
||||
|
||||
Sabertooth.cpp
|
||||
|
||||
usart_driver.c
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
usart_driver.d usart_driver.o: .././usart_driver.c .././usart_driver.h \
|
||||
.././avr_compiler.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h
|
||||
|
||||
.././usart_driver.h:
|
||||
|
||||
.././avr_compiler.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdint.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\stdlib.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\io.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\inttypes.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\iox32d4.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\portpins.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\common.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\version.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\xmega.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\fuse.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\lock.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\avr\pgmspace.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
|
||||
|
||||
c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1051\avr8-gnu-toolchain\avr\include\math.h:
|
||||
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Atmel Studio Solution File, Format Version 11.00
|
||||
Project("{E66E83B9-2572-4076-B26E-6BE79FF3018A}") = "DriveControl", "DriveControl.cppproj", "{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|AVR = Debug|AVR
|
||||
Release|AVR = Release|AVR
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Debug|AVR.ActiveCfg = Debug|AVR
|
||||
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Debug|AVR.Build.0 = Debug|AVR
|
||||
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Release|AVR.ActiveCfg = Release|AVR
|
||||
{7BA4F01E-3997-4FE4-AE8D-3C4100C86D92}.Release|AVR.Build.0 = Release|AVR
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Binary file not shown.
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
* DriveControl.cpp
|
||||
*
|
||||
* Created: 4/22/2014 8:54:20 PM
|
||||
* Author: corwin
|
||||
PE3 - Status LED
|
||||
*/
|
||||
|
||||
#define F_CPU 32000000UL
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include "Sabertooth.h"
|
||||
#include "Misc.h"
|
||||
|
||||
extern "C"{
|
||||
#include "usart_driver.h"
|
||||
#include "avr_compiler.h"
|
||||
};
|
||||
#define TIMEOUTMAX 20 //Time in seconds before state change back to init
|
||||
|
||||
/*! Define that selects the Usart used in example. */
|
||||
#define XBEEDIO0 PIN5_bm //PORTA
|
||||
#define SabertoothTx PIN3_bm //PORTD
|
||||
#define StatusLight PIN3_bm //PORTE
|
||||
|
||||
#define RECEIVE_PACKET_SIZE 6
|
||||
#define SEND_PACKET_SIZE 4
|
||||
|
||||
uint8_t sendArray[SEND_PACKET_SIZE] = {0x55, 0xaa, 0xf0};
|
||||
uint8_t receiveArray[RECEIVE_PACKET_SIZE];
|
||||
|
||||
USART_data_t USART_PC_Data;
|
||||
|
||||
bool IsRoving = false;
|
||||
|
||||
volatile long unsigned int TimeSinceInit = 0;
|
||||
long unsigned int TimePrevious = 0;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
SetXMEGA32MhzCalibrated(); //Set XMega to user 32Mhz internal oscillator with 32Khz crystal calibration
|
||||
|
||||
///////Setup Inputs and Outputs///////
|
||||
PORTC.DIRSET = (PIN5_bm | PIN6_bm | PIN7_bm | PIN3_bm); //Sets outputs on port C
|
||||
PORTC.DIRCLR = PIN2_bm; //Sets inputs on PORT C
|
||||
PORTA.DIRCLR = XBEEDIO0;
|
||||
PORTE.DIRSET = PIN3_bm; //Sets inputs on PORTA
|
||||
|
||||
|
||||
///////Initialize Serial Communcations///////
|
||||
SetupPCComms(); //Initializes PC Communications at 9600 baud0
|
||||
_delay_ms(500); //Delay to make sabertooth initialize
|
||||
Sabertooth DriveSaber(&USARTD0, &PORTD); //Initializes Sabertooth Communications at 9600 Baud
|
||||
|
||||
|
||||
//////////////////Timers///////////////
|
||||
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
|
||||
TCC0.CTRLB = TC_WGMODE_NORMAL_gc;
|
||||
TCC0.PER = 15625;
|
||||
TCC0.INTCTRLA = TC_OVFINTLVL_LO_gc;
|
||||
|
||||
TCD0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
|
||||
TCD0.CTRLB = TC_WGMODE_NORMAL_gc;
|
||||
TCD0.PER = 31250;
|
||||
TCD0.INTCTRLA = TC_OVFINTLVL_LO_gc;
|
||||
///////////////////Timers//////////////
|
||||
|
||||
sei(); //Enables global interrupts so the interrupt serial can work
|
||||
|
||||
////Semi-global vars//////
|
||||
unsigned char BufferIdx = 0;
|
||||
const char XMegaID[] = "ID: MainDrive\r\n";
|
||||
enum MicroState{
|
||||
WaitForHost,
|
||||
Driving
|
||||
}XMegaState = WaitForHost;
|
||||
|
||||
while(1){
|
||||
|
||||
switch(XMegaState){
|
||||
case WaitForHost:
|
||||
for(int i = 0 ; XMegaID[i] != '\0'; i++){
|
||||
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
|
||||
USART_PutChar(&USARTC0, XMegaID[i]);
|
||||
}
|
||||
_delay_ms(500);
|
||||
if(USART_RXBufferData_Available(&USART_PC_Data)){
|
||||
if(USART_RXBuffer_GetByte(&USART_PC_Data) == 'r'){
|
||||
XMegaState = Driving;
|
||||
//DriveSaber.ResetSaber();
|
||||
FlushSerialBuffer(&USART_PC_Data);
|
||||
USART_PutChar(&USARTC0, 'r');
|
||||
}
|
||||
}
|
||||
TimePrevious = TimeSinceInit;
|
||||
break;
|
||||
|
||||
case Driving:
|
||||
if(USART_RXBufferData_Available(&USART_PC_Data)){
|
||||
receiveArray[BufferIdx] = USART_RXBuffer_GetByte(&USART_PC_Data);
|
||||
BufferIdx++;
|
||||
}
|
||||
|
||||
if(BufferIdx == RECEIVE_PACKET_SIZE){
|
||||
FlushSerialBuffer(&USART_PC_Data);
|
||||
if(IsRoving){
|
||||
if(receiveArray[4] == PCComsChecksum(receiveArray[1], receiveArray[2], receiveArray[3])){
|
||||
DriveSaber.ParsePacket(receiveArray[2], receiveArray[3]);
|
||||
}
|
||||
}else if(!IsRoving){
|
||||
DriveSaber.ParsePacket(127, 127);
|
||||
}
|
||||
BufferIdx = 0;
|
||||
SendDriveControlStatus(&USARTC0, IsRoving, false);
|
||||
TimePrevious = TimeSinceInit;
|
||||
}
|
||||
|
||||
if((TimeSinceInit - TimePrevious) > TIMEOUTMAX){
|
||||
DriveSaber.StopAll();
|
||||
XMegaState = WaitForHost;
|
||||
TimePrevious = TimeSinceInit;
|
||||
}
|
||||
break;
|
||||
|
||||
};
|
||||
/*
|
||||
if(!IsRoving){
|
||||
DriveSaber.StopAll();
|
||||
}
|
||||
*/
|
||||
if((PORTA.IN & XBEEDIO0)){
|
||||
ERROR_CLR();
|
||||
IsRoving = true;
|
||||
}else if((!(PORTA.IN & XBEEDIO0))){
|
||||
ERROR_SET();
|
||||
IsRoving = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ISR(USARTC0_RXC_vect){
|
||||
USART_RXComplete(&USART_PC_Data);
|
||||
}
|
||||
|
||||
|
||||
ISR(USARTC0_DRE_vect){
|
||||
USART_DataRegEmpty(&USART_PC_Data);
|
||||
}
|
||||
|
||||
ISR(TCC0_OVF_vect){
|
||||
if(IsRoving){
|
||||
JUDGELED_TOGGLE();
|
||||
}else if(!IsRoving){
|
||||
JUDGELED_SET();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ISR(TCD0_OVF_vect){
|
||||
STATUS2_TOGGLE();
|
||||
TimeSinceInit++;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectVersion>6.2</ProjectVersion>
|
||||
<ToolchainName>com.Atmel.AVRGCC8.CPP</ToolchainName>
|
||||
<ProjectGuid>{7ba4f01e-3997-4fe4-ae8d-3c4100c86d92}</ProjectGuid>
|
||||
<avrdevice>ATxmega32D4</avrdevice>
|
||||
<avrdeviceseries>none</avrdeviceseries>
|
||||
<OutputType>Executable</OutputType>
|
||||
<Language>CPP</Language>
|
||||
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
|
||||
<OutputFileExtension>.elf</OutputFileExtension>
|
||||
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
|
||||
<AssemblyName>DriveControl</AssemblyName>
|
||||
<Name>DriveControl</Name>
|
||||
<RootNamespace>DriveControl</RootNamespace>
|
||||
<ToolchainFlavour>Native</ToolchainFlavour>
|
||||
<KeepTimersRunning>true</KeepTimersRunning>
|
||||
<OverrideVtor>false</OverrideVtor>
|
||||
<CacheFlash>true</CacheFlash>
|
||||
<ProgFlashFromRam>true</ProgFlashFromRam>
|
||||
<RamSnippetAddress>0x20000000</RamSnippetAddress>
|
||||
<UncachedRange />
|
||||
<OverrideVtorValue>exception_table</OverrideVtorValue>
|
||||
<BootSegment>2</BootSegment>
|
||||
<eraseonlaunchrule>0</eraseonlaunchrule>
|
||||
<AsfFrameworkConfig>
|
||||
<framework-data xmlns="">
|
||||
<options />
|
||||
<configurations />
|
||||
<files />
|
||||
<documentation help="" />
|
||||
<offline-documentation help="" />
|
||||
<dependencies>
|
||||
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.15.0" />
|
||||
</dependencies>
|
||||
</framework-data>
|
||||
</AsfFrameworkConfig>
|
||||
<avrtool>com.atmel.avrdbg.tool.ispmk2</avrtool>
|
||||
<avrtoolinterface>PDI</avrtoolinterface>
|
||||
<com_atmel_avrdbg_tool_ispmk2>
|
||||
<ToolOptions>
|
||||
<InterfaceProperties>
|
||||
<JtagEnableExtResetOnStartSession>false</JtagEnableExtResetOnStartSession>
|
||||
</InterfaceProperties>
|
||||
<InterfaceName>PDI</InterfaceName>
|
||||
</ToolOptions>
|
||||
<ToolType>com.atmel.avrdbg.tool.ispmk2</ToolType>
|
||||
<ToolNumber>000200086630</ToolNumber>
|
||||
<ToolName>AVRISP mkII</ToolName>
|
||||
</com_atmel_avrdbg_tool_ispmk2>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<ToolchainSettings>
|
||||
<AvrGccCpp>
|
||||
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
|
||||
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
|
||||
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
|
||||
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
|
||||
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
|
||||
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
|
||||
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
|
||||
<avrgcc.compiler.symbols.DefSymbols>
|
||||
<ListValues>
|
||||
<Value>NDEBUG</Value>
|
||||
</ListValues>
|
||||
</avrgcc.compiler.symbols.DefSymbols>
|
||||
<avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
|
||||
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
|
||||
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
|
||||
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
|
||||
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
|
||||
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
|
||||
<avrgcccpp.compiler.symbols.DefSymbols>
|
||||
<ListValues>
|
||||
<Value>NDEBUG</Value>
|
||||
</ListValues>
|
||||
</avrgcccpp.compiler.symbols.DefSymbols>
|
||||
<avrgcccpp.compiler.optimization.level>Optimize for size (-Os)</avrgcccpp.compiler.optimization.level>
|
||||
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
|
||||
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
|
||||
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
|
||||
<avrgcccpp.linker.libraries.Libraries>
|
||||
<ListValues>
|
||||
<Value>libm</Value>
|
||||
</ListValues>
|
||||
</avrgcccpp.linker.libraries.Libraries>
|
||||
</AvrGccCpp>
|
||||
</ToolchainSettings>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<ToolchainSettings>
|
||||
<AvrGccCpp>
|
||||
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
|
||||
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
|
||||
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
|
||||
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
|
||||
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
|
||||
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
|
||||
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
|
||||
<avrgcc.compiler.symbols.DefSymbols>
|
||||
<ListValues>
|
||||
<Value>DEBUG</Value>
|
||||
</ListValues>
|
||||
</avrgcc.compiler.symbols.DefSymbols>
|
||||
<avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
|
||||
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
|
||||
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
|
||||
<avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
|
||||
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
|
||||
<avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
|
||||
<avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>
|
||||
<avrgcccpp.compiler.symbols.DefSymbols>
|
||||
<ListValues>
|
||||
<Value>DEBUG</Value>
|
||||
</ListValues>
|
||||
</avrgcccpp.compiler.symbols.DefSymbols>
|
||||
<avrgcccpp.compiler.optimization.level>Optimize (-O1)</avrgcccpp.compiler.optimization.level>
|
||||
<avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers>
|
||||
<avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>
|
||||
<avrgcccpp.compiler.optimization.DebugLevel>Default (-g2)</avrgcccpp.compiler.optimization.DebugLevel>
|
||||
<avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings>
|
||||
<avrgcccpp.linker.libraries.Libraries>
|
||||
<ListValues>
|
||||
<Value>libm</Value>
|
||||
</ListValues>
|
||||
</avrgcccpp.linker.libraries.Libraries>
|
||||
<avrgcccpp.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcccpp.assembler.debugging.DebugLevel>
|
||||
</AvrGccCpp>
|
||||
</ToolchainSettings>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="avr_compiler.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DriveControl.cpp">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Misc.cpp">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Misc.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Sabertooth.cpp">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Sabertooth.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="usart_driver.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="usart_driver.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Misc.cpp
|
||||
*
|
||||
* Created: 4/30/2014 3:09:52 PM
|
||||
* Author: Corwin
|
||||
*/
|
||||
#include "Misc.h"
|
||||
#include <avr/io.h>
|
||||
|
||||
void SetXMEGA32MhzCalibrated(){
|
||||
CCP = CCP_IOREG_gc; //Disable register security for oscillator update
|
||||
OSC.CTRL = OSC_RC32MEN_bm; //Enable 32MHz oscillator
|
||||
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); //Wait for oscillator to be ready
|
||||
CCP = CCP_IOREG_gc; //Disable register security for clock update
|
||||
CLK.CTRL = CLK_SCLKSEL_RC32M_gc; //Switch to 32MHz clock
|
||||
|
||||
|
||||
CCP = CCP_IOREG_gc; //Disable register security for oscillator update
|
||||
OSC.CTRL |= OSC_RC32KEN_bm; //Enable 32Khz oscillator
|
||||
while(!(OSC.STATUS & OSC_RC32KRDY_bm)); //Wait for oscillator to be ready
|
||||
OSC.DFLLCTRL &= ~OSC_RC32MCREF_bm; //Set up calibration source to be 32Khz crystal
|
||||
DFLLRC32M.CTRL |= DFLL_ENABLE_bm; //Enable calibration of 32Mhz oscillator
|
||||
}
|
||||
|
||||
void SetupPCComms(){
|
||||
USART_InterruptDriver_Initialize(&USART_PC_Data, &USARTC0, USART_DREINTLVL_LO_gc); //Initialize USARTC0 as interrupt driven serial and clear it's buffers
|
||||
USART_Format_Set(USART_PC_Data.usart, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false); //Set the data format of 8 bits, no parity, 1 stop bit
|
||||
USART_RxdInterruptLevel_Set(USART_PC_Data.usart, USART_RXCINTLVL_LO_gc); //Enable the receive interrupt
|
||||
USART_Baudrate_Set(&USARTC0, 207 , 0); //Set baudrate to 9600 with 32Mhz system clock
|
||||
USART_Rx_Enable(USART_PC_Data.usart); //Enable receiving over serial
|
||||
USART_Tx_Enable(USART_PC_Data.usart); //Enable transmitting over serial
|
||||
PMIC.CTRL |= PMIC_LOLVLEX_bm; //Enable PMIC interrupt level low (No idea what this does, but is necessary)
|
||||
}
|
||||
|
||||
unsigned char PCComsChecksum(unsigned char command, unsigned char left, unsigned char right){
|
||||
return (command ^ left ^ right);
|
||||
|
||||
}
|
||||
|
||||
void SendDriveControlStatus(USART_t *PCComs, bool IsRoving, bool Checksum){
|
||||
while(!USART_IsTXDataRegisterEmpty(PCComs));
|
||||
USART_PutChar(PCComs, 255);
|
||||
while(!USART_IsTXDataRegisterEmpty(PCComs));
|
||||
USART_PutChar(PCComs, ((IsRoving << 0) | (Checksum << 1)));
|
||||
while(!USART_IsTXDataRegisterEmpty(PCComs));
|
||||
USART_PutChar(PCComs, 255);
|
||||
}
|
||||
|
||||
void FlushSerialBuffer(USART_data_t *UsartBuffer){
|
||||
while(USART_RXBufferData_Available(UsartBuffer)){
|
||||
USART_RXBuffer_GetByte(UsartBuffer);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Misc.h
|
||||
*
|
||||
* Created: 4/30/2014 3:10:05 PM
|
||||
* Author: Corwin
|
||||
*/
|
||||
|
||||
|
||||
#ifndef MISC_H_
|
||||
#define MISC_H_
|
||||
#include <avr/io.h>
|
||||
|
||||
//Custom Defined Macros
|
||||
#define STATUS1_SET(void) (PORTC.OUTSET = PIN6_bm)
|
||||
#define STATUS1_CLR(void) (PORTC.OUTCLR = PIN6_bm)
|
||||
#define STATUS1_TOGGLE(void) (PORTC.OUTTGL = PIN6_bm)
|
||||
|
||||
#define STATUS2_SET(void) (PORTC.OUTSET = PIN5_bm)
|
||||
#define STATUS2_CLR(void) (PORTC.OUTCLR = PIN5_bm)
|
||||
#define STATUS2_TOGGLE(void) (PORTC.OUTTGL = PIN5_bm)
|
||||
|
||||
#define ERROR_SET(void) (PORTC.OUTSET = PIN7_bm)
|
||||
#define ERROR_CLR(void) (PORTC.OUTCLR = PIN7_bm)
|
||||
#define ERROR_TOGGLE(void) (PORTC.OUTTGL = PIN7_bm)
|
||||
|
||||
#define JUDGELED_SET(void) (PORTE.OUTSET = PIN3_bm)
|
||||
#define JUDGELED_CLR(void) (PORTE.OUTCLR = PIN3_bm)
|
||||
#define JUDGELED_TOGGLE(void) (PORTE.OUTTGL = PIN3_bm)
|
||||
|
||||
extern "C"{
|
||||
#include "usart_driver.h"
|
||||
#include "avr_compiler.h"
|
||||
};
|
||||
|
||||
extern USART_data_t USART_PC_Data;
|
||||
|
||||
void SetXMEGA32MhzCalibrated();
|
||||
void SetupPCComms();
|
||||
unsigned char PCComsChecksum(unsigned char command, unsigned char left, unsigned char right);
|
||||
void SendDriveControlStatus(USART_t *PCComs, bool IsRoving, bool Checksum);
|
||||
void FlushSerialBuffer(USART_data_t *UsartBuffer);
|
||||
|
||||
#endif /* MISC_H_ */
|
||||
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Sabertooth.cpp
|
||||
*
|
||||
* Created: 4/30/2014 1:08:16 PM
|
||||
* Author: Corwin
|
||||
*/
|
||||
|
||||
|
||||
#include "Sabertooth.h"
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
|
||||
Sabertooth::Sabertooth(USART_t *USART_SaberUsart, PORT_t * SaberPORT)
|
||||
{
|
||||
Sabertooth_USART = USART_SaberUsart; //Sets the private variable to the USART being used
|
||||
Sabertooth_PORT = SaberPORT; //Sets the private variable for the PORT the USART is on
|
||||
|
||||
Sabertooth_PORT->DIRSET = PIN3_bm; //Sets the TX pin for the USART to an output
|
||||
USART_Format_Set(Sabertooth_USART, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false); //Sets the Sabertooth USART to run in 8 bit data, no parity, and 1 stop bit,
|
||||
USART_Baudrate_Set(Sabertooth_USART, 207 , 0); //Sets the Sabertooth baud rate to 9600 when running at 32Mhz system clock
|
||||
USART_Tx_Enable(Sabertooth_USART); //Enable the USART transmit capabilities
|
||||
_delay_ms(100); //Delay to let things settle
|
||||
|
||||
USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
|
||||
SendDriveCmd(14, 20); //Sets the communication watchdog on the sabertooth to (x*100ms) It's currently set to two seconds.
|
||||
StopAll(); //Everything is now initialized, stop all motor movement to account for random noise or failed startups
|
||||
}
|
||||
|
||||
void Sabertooth::DriveTest(){
|
||||
|
||||
int i;
|
||||
for(i = 0; i < 128 ; i++){
|
||||
SendDriveCmd(LEFT_FORWARD, i);
|
||||
SendDriveCmd(RIGHT_FORWARD, i);
|
||||
_delay_ms(30);
|
||||
}
|
||||
for( ; i > 0 ; i--){
|
||||
SendDriveCmd(LEFT_FORWARD, i);
|
||||
SendDriveCmd(RIGHT_FORWARD, i);
|
||||
_delay_ms(30);
|
||||
}
|
||||
|
||||
for(i = 0; i < 128 ; i++){
|
||||
SendDriveCmd(LEFT_BACK, i);
|
||||
SendDriveCmd(RIGHT_BACK, i);
|
||||
_delay_ms(30);
|
||||
}
|
||||
for( ; i > 0 ; i--){
|
||||
SendDriveCmd(LEFT_BACK, i);
|
||||
SendDriveCmd(RIGHT_BACK, i);
|
||||
_delay_ms(30);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Sabertooth::ParsePacket(unsigned char left, unsigned char right){
|
||||
unsigned char command_left = LEFT_FORWARD;
|
||||
unsigned char value_left = 0;
|
||||
unsigned char command_right = RIGHT_FORWARD;
|
||||
unsigned char value_right = 0;
|
||||
|
||||
if(left == 127){
|
||||
command_left = LEFT_FORWARD;
|
||||
value_left = 0;
|
||||
}else if(left < 127){
|
||||
command_left = LEFT_BACK;
|
||||
value_left = (127-left);
|
||||
}else if(left > 127){
|
||||
command_left = LEFT_FORWARD;
|
||||
value_left = (left-127);
|
||||
}
|
||||
|
||||
if(right == 127){
|
||||
command_right = RIGHT_FORWARD;
|
||||
value_right = 0;
|
||||
}else if(right < 127){
|
||||
command_right = RIGHT_BACK;
|
||||
value_right = (127-right);
|
||||
}else if(right > 127){
|
||||
command_right = RIGHT_FORWARD;
|
||||
value_right = (right-127);
|
||||
}
|
||||
|
||||
SendDriveCmd(command_left, value_left);
|
||||
SendDriveCmd(command_right, value_right);
|
||||
}
|
||||
|
||||
void Sabertooth::StopAll(){
|
||||
ParsePacket(127, 127);
|
||||
}
|
||||
|
||||
unsigned char Sabertooth::SaberChecksum(unsigned char command, unsigned char value){
|
||||
return ((SABERTOOTHADDRESS+command+value) & 127);
|
||||
}
|
||||
|
||||
void Sabertooth::SendDriveCmd(char command, char value){
|
||||
////////////////////////////////Testing.....
|
||||
//while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART)); //Necessary to make sure we don't overwrite data in the buffer
|
||||
//USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
|
||||
////////////////////////////////
|
||||
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART)); //Necessary to make sure we don't overwrite data in the buffer
|
||||
USART_PutChar(Sabertooth_USART, SABERTOOTHADDRESS); //Sends the address to the sabertooth
|
||||
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
|
||||
USART_PutChar(Sabertooth_USART, command); //Sends the command to the sabertooth
|
||||
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
|
||||
USART_PutChar(Sabertooth_USART, value); //Sends the value or speed to the sabertooth
|
||||
while(!USART_IsTXDataRegisterEmpty(Sabertooth_USART));
|
||||
USART_PutChar(Sabertooth_USART, SaberChecksum(command, value)); //Send the checksum of all these values to the sabertooth
|
||||
}
|
||||
|
||||
void Sabertooth::ResetSaber(){
|
||||
USART_PutChar(Sabertooth_USART, AUTOBAUD_BYTE); //Send the autobaud byte to get the sabertooth communicating
|
||||
SendDriveCmd(14, 20); //Sets the communication watchdog on the sabertooth to (x*100ms) It's currently set to two seconds.
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Sabertooth.h
|
||||
*
|
||||
* Created: 4/30/2014 1:08:16 PM
|
||||
* Author: Corwin
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __SABERTOOTH_H__
|
||||
#define __SABERTOOTH_H__
|
||||
|
||||
#define F_CPU 32000000UL
|
||||
#define SABERTOOTHADDRESS 128
|
||||
#define AUTOBAUD_BYTE 170
|
||||
|
||||
#define LEFT_FORWARD 0
|
||||
#define LEFT_BACK 1
|
||||
#define RIGHT_FORWARD 4
|
||||
#define RIGHT_BACK 5
|
||||
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
extern "C"{
|
||||
#include "usart_driver.h"
|
||||
#include "avr_compiler.h"
|
||||
};
|
||||
|
||||
class Sabertooth
|
||||
{
|
||||
//variables
|
||||
public:
|
||||
protected:
|
||||
private:
|
||||
|
||||
//functions
|
||||
public:
|
||||
Sabertooth(USART_t *USART_SaberUsart, PORT_t * SaberPORT);
|
||||
void DriveTest();
|
||||
void StopAll();
|
||||
unsigned char SaberChecksum(unsigned char command, unsigned char value);
|
||||
void ParsePacket(unsigned char left, unsigned char right);
|
||||
void ResetSaber();
|
||||
protected:
|
||||
private:
|
||||
void SendDriveCmd(char command, char value);
|
||||
Sabertooth( const Sabertooth &c );
|
||||
Sabertooth& operator=( const Sabertooth &c );
|
||||
USART_t *Sabertooth_USART;
|
||||
PORT_t *Sabertooth_PORT;
|
||||
|
||||
}; //Sabertooth
|
||||
|
||||
#endif //__SABERTOOTH_H__
|
||||
@@ -0,0 +1,433 @@
|
||||
/* This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief XMEGA Timer/Counter driver source file.
|
||||
*
|
||||
* This file contains the function implementations the XMEGA Timer/Counter
|
||||
* driver.
|
||||
*
|
||||
* The driver is not intended for size and/or speed critical code, since
|
||||
* most functions are just a few lines of code, and the function call
|
||||
* overhead would decrease code performance. The driver is intended for
|
||||
* rapid prototyping and documentation purposes for getting started with
|
||||
* the XMEGA Timer/Counter module.
|
||||
*
|
||||
* For size and/or speed critical code, it is recommended to copy the
|
||||
* function contents directly into your application instead of making
|
||||
* a function call.
|
||||
*
|
||||
* Several functions use the following construct:
|
||||
* "some_register = ... | (some_parameter ? SOME_BIT_bm : 0) | ..."
|
||||
* Although the use of the ternary operator ( if ? then : else ) is discouraged,
|
||||
* in some occasions the operator makes it possible to write pretty clean and
|
||||
* neat code. In this driver, the construct is used to set or not set a
|
||||
* configuration bit based on a boolean input parameter, such as
|
||||
* the "some_parameter" in the example above.
|
||||
*
|
||||
* \par Application note:
|
||||
* AVR1306: Using the XMEGA Timer/Counter
|
||||
*
|
||||
* \par Documentation
|
||||
* For comprehensive code documentation, supported compilers, compiler
|
||||
* settings and supported devices see readme.html
|
||||
*
|
||||
* \author
|
||||
* Atmel Corporation: http://www.atmel.com \n
|
||||
* Support email: avr@atmel.com
|
||||
*
|
||||
* $Revision: 1569 $
|
||||
* $Date: 2008-04-22 13:03:43 +0200 (ti, 22 apr 2008) $ \n
|
||||
*
|
||||
* Copyright (c) 2008, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "avr_compiler.h"
|
||||
#include "TC_driver.h"
|
||||
|
||||
/*! \brief Configures clock source for the Timer/Counter 0.
|
||||
*
|
||||
* This function clears the old clock source setting of the Timer/Counter and
|
||||
* sets a new clock source according to the clockSelection parameter.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param clockSelection Timer/Counter clock source setting.
|
||||
*/
|
||||
void TC0_ConfigClockSource( volatile TC0_t * tc, TC_CLKSEL_t clockSelection )
|
||||
{
|
||||
tc->CTRLA = ( tc->CTRLA & ~TC0_CLKSEL_gm ) | clockSelection;
|
||||
}
|
||||
|
||||
/*! \brief Configures clock source for the Timer/Counter 1.
|
||||
*
|
||||
* This function clears the old clock source setting of the Timer/Counter and
|
||||
* sets a new clock source according to the clockSelection parameter.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param clockSelection Timer/Counter clock source setting.
|
||||
*/
|
||||
void TC1_ConfigClockSource( volatile TC1_t * tc, TC_CLKSEL_t clockSelection )
|
||||
{
|
||||
tc->CTRLA = ( tc->CTRLA & ~TC1_CLKSEL_gm ) | clockSelection;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Configures the Waveform Generation Mode for the Timer/Counter 0.
|
||||
*
|
||||
* This function clears the old WGM setting of the Timer/Counter and sets a
|
||||
* new WGM setting according to the wgm parameter.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param wgm Waveform generation mode.
|
||||
*/
|
||||
void TC0_ConfigWGM( volatile TC0_t * tc, TC_WGMODE_t wgm )
|
||||
{
|
||||
tc->CTRLB = ( tc->CTRLB & ~TC0_WGMODE_gm ) | wgm;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Configures the Waveform Generation Mode for the Timer/Counter 1.
|
||||
*
|
||||
* This function clears the old WGM setting of the Timer/Counter and sets a
|
||||
* new WGM setting according to the wgm parameter.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param wgm Waveform generation mode.
|
||||
*/
|
||||
void TC1_ConfigWGM( volatile TC1_t * tc, TC_WGMODE_t wgm )
|
||||
{
|
||||
tc->CTRLB = ( tc->CTRLB & ~TC1_WGMODE_gm ) | wgm;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Configures the Timer/Counter 0 for input capture operation.
|
||||
*
|
||||
* This function sets the Timer/Counter in input capture mode and selects
|
||||
* the event lines that will trigger the individual input capture channels.
|
||||
*
|
||||
* \note Output compare operation is disabled when input capture operation is
|
||||
* enabled.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param eventSource Event source selection.
|
||||
*/
|
||||
void TC0_ConfigInputCapture( volatile TC0_t * tc, TC_EVSEL_t eventSource )
|
||||
{
|
||||
tc->CTRLD = ( tc->CTRLD & ~( TC0_EVSEL_gm | TC0_EVACT_gm ) ) |
|
||||
eventSource |
|
||||
TC_EVACT_CAPT_gc;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Configures the Timer/Counter 1 for input capture operation.
|
||||
*
|
||||
* This function sets the Timer/Counter in input capture mode and selects
|
||||
* the event lines that will trigger the individual input capture channels.
|
||||
*
|
||||
* \note Output compare operation is disabled when input capture operation is
|
||||
* enabled.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param eventSource Event source selection.
|
||||
*/
|
||||
void TC1_ConfigInputCapture( volatile TC1_t * tc, TC_EVSEL_t eventSource )
|
||||
{
|
||||
tc->CTRLD = ( tc->CTRLD & ~( TC1_EVSEL_gm | TC1_EVACT_gm ) ) |
|
||||
eventSource |
|
||||
TC_EVACT_CAPT_gc;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Enables compare/capture channels for Timer/Counter 0.
|
||||
*
|
||||
* This function enables compare/capture channels according to the supplied
|
||||
* enableMask. The enableMask can be obtained by ORing together the symbols
|
||||
* - TC0_CCAEN_bm
|
||||
* - TC0_CCBEN_bm
|
||||
* - TC0_CCCEN_bm
|
||||
* - TC0_CCDEN_bm
|
||||
*
|
||||
* Example: TC0_EnableCCChannels( &TCC0, TC0_CCAEN_bm | TC0_CCCEN_bm ) will
|
||||
* enable channels A and C.
|
||||
*
|
||||
* \note No capture/compare channels are disabled by calling this function.
|
||||
* Disabling is done by calling \ref TC0_DisableCCChannels.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param enableMask Mask of channels to enable.
|
||||
*/
|
||||
void TC0_EnableCCChannels( volatile TC0_t * tc, uint8_t enableMask )
|
||||
{
|
||||
/* Make sure only CCxEN bits are set in enableMask. */
|
||||
enableMask &= ( TC0_CCAEN_bm | TC0_CCBEN_bm | TC0_CCCEN_bm | TC0_CCDEN_bm );
|
||||
|
||||
/* Enable channels. */
|
||||
tc->CTRLB |= enableMask;
|
||||
}
|
||||
|
||||
/*! \brief Enables compare/capture channels for Timer/Counter 1.
|
||||
*
|
||||
* This function enables compare/capture channels according to the supplied
|
||||
* enableMask. The enableMask can be obtained by ORing together the symbols
|
||||
* - TC1_CCAEN_bm
|
||||
* - TC1_CCBEN_bm
|
||||
*
|
||||
* Example: TC1_EnableCCChannels( &TCC1, TC1_CCAEN_bm | TC1_CCBEN_bm ) will
|
||||
* enable channels A and B.
|
||||
*
|
||||
* \note No capture/compare channels are disabled by calling this function.
|
||||
* Disabling is done by calling \ref TC1_DisableCCChannels.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param enableMask Mask of channels to enable.
|
||||
*/
|
||||
void TC1_EnableCCChannels( volatile TC1_t * tc, uint8_t enableMask )
|
||||
{
|
||||
/* Make sure only CCxEN bits are set in enableMask. */
|
||||
enableMask &= ( TC1_CCAEN_bm | TC1_CCBEN_bm );
|
||||
|
||||
/* Enable channels. */
|
||||
tc->CTRLB |= enableMask;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Disables compare/capture channels on Timer/Counter 0.
|
||||
*
|
||||
* This function disables compare/capture channels according to the supplied
|
||||
* disableMask. The disableMask can be obtained by ORing together the symbols
|
||||
* - TC0_CCAEN_bm
|
||||
* - TC0_CCBEN_bm
|
||||
* - TC0_CCCEN_bm
|
||||
* - TC0_CCDEN_bm
|
||||
*
|
||||
* Example: TC0_DisableCCChannels( &TCC0, TC0_CCAEN_bm | TC0_CCCEN_bm ) will
|
||||
* disable channels A and C.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param disableMask Mask of channels to disable.
|
||||
*/
|
||||
void TC0_DisableCCChannels( volatile TC0_t * tc, uint8_t disableMask )
|
||||
{
|
||||
/* Make sure only CCxEN bits are set in disableMask. */
|
||||
disableMask &= ( TC0_CCAEN_bm | TC0_CCBEN_bm | TC0_CCCEN_bm | TC0_CCDEN_bm );
|
||||
|
||||
/* Disable channels. */
|
||||
tc->CTRLB &= ~disableMask;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Disables compare/capture channels on Timer/Counter 1.
|
||||
*
|
||||
* This function disables compare/capture channels according to the supplied
|
||||
* disableMask. The disableMask can be obtained by ORing together the symbols
|
||||
* - TC1_CCAEN_bm
|
||||
* - TC1_CCBEN_bm
|
||||
*
|
||||
* Example: TC1_DisableCCChannels( &TCC1, TC1_CCAEN_bm | TC1_CCBEN_bm ) will
|
||||
* disable channels A and B.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param disableMask Mask of channels to disable.
|
||||
*/
|
||||
void TC1_DisableCCChannels( volatile TC1_t * tc, uint8_t disableMask )
|
||||
{
|
||||
/* Make sure only CCxEN bits are set in disableMask. */
|
||||
disableMask &= ( TC1_CCAEN_bm | TC1_CCBEN_bm );
|
||||
|
||||
/* Disable channels. */
|
||||
tc->CTRLB &= ~disableMask;
|
||||
}
|
||||
|
||||
/*! \brief Sets the overflow interrupt level.
|
||||
*
|
||||
* This function sets the overflow interrupt level of this Timer/Counter 0.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New overflow interrupt level.
|
||||
*/
|
||||
void TC0_SetOverflowIntLevel( volatile TC0_t * tc, TC_OVFINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLA = ( tc->INTCTRLA & ~TC0_OVFINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the overflow interrupt level.
|
||||
*
|
||||
* This function sets the overflow interrupt level of this Timer/Counter 1.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New overflow interrupt level.
|
||||
*/
|
||||
void TC1_SetOverflowIntLevel( volatile TC1_t * tc, TC_OVFINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLA = ( tc->INTCTRLA & ~TC1_OVFINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the Error interrupt level.
|
||||
*
|
||||
* This function sets the overflow interrupt level of this Timer/Counter 0.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New error interrupt level.
|
||||
*/
|
||||
void TC0_SetErrorIntLevel( volatile TC0_t * tc, TC_ERRINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLA = ( tc->INTCTRLA & ~TC0_ERRINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the Error interrupt level.
|
||||
*
|
||||
* This function sets the overflow interrupt level of this Timer/Counter 1.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New error interrupt level.
|
||||
*/
|
||||
void TC1_SetErrorIntLevel( volatile TC1_t * tc, TC_ERRINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLA = ( tc->INTCTRLA & ~TC1_ERRINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the interrupt level for compare/capture channel A interrupt.
|
||||
*
|
||||
* This function sets the interrupt level for compare/capture channel A
|
||||
* interrupt in Timer/Counter 0.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New compare/capture channel A interrupt level.
|
||||
*/
|
||||
void TC0_SetCCAIntLevel( volatile TC0_t * tc, TC_CCAINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCAINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the interrupt level for compare/capture channel A interrupt.
|
||||
*
|
||||
* This function sets the interrupt level for compare/capture channel A
|
||||
* interrupt in Timer/Counter 1.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New compare/capture channel A interrupt level.
|
||||
*/
|
||||
void TC1_SetCCAIntLevel( volatile TC1_t * tc, TC_CCAINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLB = ( tc->INTCTRLB & ~TC1_CCAINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the interrupt level for compare/capture channel B interrupt.
|
||||
*
|
||||
* This function sets the interrupt level for compare/capture channel B
|
||||
* interrupt in Timer/Counter 0.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New compare/capture channel B interrupt level.
|
||||
*/
|
||||
void TC0_SetCCBIntLevel( volatile TC0_t * tc, TC_CCBINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCBINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the interrupt level for compare/capture channel B interrupt.
|
||||
*
|
||||
* This function sets the interrupt level for compare/capture channel B
|
||||
* interrupt in Timer/Counter 1.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New compare/capture channel B interrupt level.
|
||||
*/
|
||||
void TC1_SetCCBIntLevel( volatile TC1_t * tc, TC_CCBINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLB = ( tc->INTCTRLB & ~TC1_CCBINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the interrupt level for compare/capture channel C interrupt.
|
||||
*
|
||||
* This function sets the interrupt level for compare/capture channel C
|
||||
* interrupt in Timer/Counter 0.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New compare/capture channel A interrupt level.
|
||||
*/
|
||||
void TC0_SetCCCIntLevel( volatile TC0_t * tc, TC_CCCINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCCINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the interrupt level for compare/capture channel D interrupt.
|
||||
*
|
||||
* This function sets the interrupt level for compare/capture channel D
|
||||
* interrupt in Timer/Counter 0.
|
||||
*
|
||||
* \param tc Timer/Counter module instance.
|
||||
* \param intLevel New compare/capture channel A interrupt level.
|
||||
*/
|
||||
void TC0_SetCCDIntLevel( volatile TC0_t * tc, TC_CCDINTLVL_t intLevel )
|
||||
{
|
||||
tc->INTCTRLB = ( tc->INTCTRLB & ~TC0_CCDINTLVL_gm ) | intLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Resets the Timer/Counter 0.
|
||||
*
|
||||
* This function will reset the Timer/Counter. After calling this function,
|
||||
* the Timer/Counter will be in the same state as it would after a full
|
||||
* reset of the device.
|
||||
*
|
||||
* \param tc Timer/Counter 0 module instance.
|
||||
*/
|
||||
void TC0_Reset( volatile TC0_t * tc )
|
||||
{
|
||||
/* TC must be turned off before a Reset command. */
|
||||
tc->CTRLA = ( tc->CTRLA & ~TC0_CLKSEL_gm ) | TC_CLKSEL_OFF_gc;
|
||||
|
||||
/* Issue Reset command. */
|
||||
tc->CTRLFSET = TC_CMD_RESET_gc;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Resets the Timer/Counter 1.
|
||||
*
|
||||
* This function will reset the Timer/Counter. After calling this function,
|
||||
* the Timer/Counter will be in the same state as it would after a full
|
||||
* reset of the device.
|
||||
*
|
||||
* \param tc Timer/Counter 1 module instance.
|
||||
*/
|
||||
void TC1_Reset( volatile TC1_t * tc )
|
||||
{
|
||||
/* TC must be turned off before a Reset command. */
|
||||
tc->CTRLA = ( tc->CTRLA & ~TC1_CLKSEL_gm ) | TC_CLKSEL_OFF_gc;
|
||||
|
||||
/* Issue Reset command. */
|
||||
tc->CTRLFSET = TC_CMD_RESET_gc;
|
||||
}
|
||||
@@ -0,0 +1,423 @@
|
||||
/* This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief XMEGA Timer/Counter driver header file.
|
||||
*
|
||||
* This file contains the function prototypes and enumerator definitions
|
||||
* for various configuration parameters for the XMEGA Timer/Counter driver.
|
||||
*
|
||||
* The driver is not intended for size and/or speed critical code, since
|
||||
* most functions are just a few lines of code, and the function call
|
||||
* overhead would decrease code performance. The driver is intended for
|
||||
* rapid prototyping and documentation purposes for getting started with
|
||||
* the XMEGA Timer/Counter module.
|
||||
*
|
||||
* For size and/or speed critical code, it is recommended to copy the
|
||||
* function contents directly into your application instead of making
|
||||
* a function call.
|
||||
*
|
||||
* \par Application note:
|
||||
* AVR1306: Using the XMEGA Timer/Counter
|
||||
*
|
||||
* \par Documentation
|
||||
* For comprehensive code documentation, supported compilers, compiler
|
||||
* settings and supported devices see readme.html
|
||||
*
|
||||
* \author
|
||||
* Atmel Corporation: http://www.atmel.com \n
|
||||
* Support email: avr@atmel.com
|
||||
*
|
||||
* $Revision: 1569 $
|
||||
* $Date: 2008-04-22 13:03:43 +0200 (ti, 22 apr 2008) $ \n
|
||||
*
|
||||
* Copyright (c) 2008, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
#ifndef TC_DRIVER_H
|
||||
#define TC_DRIVER_H
|
||||
|
||||
#include "avr_compiler.h"
|
||||
|
||||
/* Definition of macros. */
|
||||
|
||||
/*! \brief Enables the event delay for this TC.
|
||||
*
|
||||
* This macro enables a one clock cycle delay of event sources for this TC.
|
||||
* Mainly used for the high word TC when two TCs are cascaded to form a 32-bit
|
||||
* TC.
|
||||
*
|
||||
* \param _tc The Timer/Counter to enable delay on.
|
||||
*/
|
||||
#define TC_EnableEventDelay( _tc ) ( (_tc)->CTRLD |= TC0_EVDLY_bm )
|
||||
|
||||
/*! \brief This macro disables the event delay for this TC.
|
||||
*
|
||||
* \param _tc The Timer/Counter to disable delay on.
|
||||
*/
|
||||
#define TC_DisableEventDelay( _tc ) ( (_tc)->CTRLD &= ~TC0_EVDLY_bm )
|
||||
|
||||
/*! \brief Locks automatic updating of compare and period registers.
|
||||
*
|
||||
* This macro will lock automatic updates of compare registers from the
|
||||
* corresponding buffer registers. To enable automatic updates again, use the
|
||||
* \ref TC_UnlockCompareUpdate macro.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_LockCompareUpdate( _tc ) ( (_tc)->CTRLFSET = TC0_LUPD_bm )
|
||||
|
||||
/*! \brief Unlocks automatic updating of compare and period registers.
|
||||
*
|
||||
* This macro will unlock automatic updates of compare registers from the
|
||||
* corresponding buffer registers. Note that the output compare registers will
|
||||
* not be updated until an update event occurs, e.g. that the counter hits
|
||||
* TOP or BOTTOM. To force an update of the compare register from the buffer
|
||||
* register, use the \ref TC_ForceUpdate macro.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_UnlockCompareUpdate( _tc ) ( (_tc)->CTRLFCLR = TC0_LUPD_bm )
|
||||
|
||||
|
||||
/*! \brief Force an update of the output compare and period registers.
|
||||
*
|
||||
* This macro will trigger a transfer from the output compare and period
|
||||
* buffer registers ( CCxBUF and PERBUF ) to the output compare and period
|
||||
* registers ( CCx and PER ). Calling this macro has the same effect as an
|
||||
* update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_ForceUpdate( _tc ) ( (_tc)->CTRLFSET = TC_CMD_UPDATE_gc )
|
||||
|
||||
/*! \brief Restart the Timer/Counter.
|
||||
*
|
||||
* This macro will restart the timer. The effect of running this command is:
|
||||
* - The CNT[H:L] register is cleared.
|
||||
* - The direction (DIR ) is reset. (Next clock cycle will increase the counter )
|
||||
* - All compare outputs are set to 0.
|
||||
* - If a DTI module is connected to the timer, it will be reset as well.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_Restart( _tc ) ( (_tc)->CTRLFSET = TC_CMD_RESTART_gc )
|
||||
|
||||
/*! \brief Manually set the count.
|
||||
*
|
||||
* This macro writes a new value to the CNT[H:L] register.
|
||||
* Note that the CNT[H:L] register is not double buffered, so it is recommended
|
||||
* that the timer is not running when this macro is used.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
* \param _count New count value.
|
||||
*/
|
||||
#define TC_SetCount( _tc, _count ) ( (_tc)->CNT = (_count) )
|
||||
|
||||
/*! \brief Sets the timer period.
|
||||
*
|
||||
* This macro sets a new timer period. The period buffer register is not
|
||||
* used, so the new period will be valid immediately after the 16-bit write
|
||||
* is finished.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
* \param _period New Timer/Counter period.
|
||||
*/
|
||||
#define TC_SetPeriod( _tc, _period ) ( (_tc)->PER = (_period) )
|
||||
|
||||
/*! \brief Sets the timer period ( double buffered ).
|
||||
*
|
||||
* This macro sets a new timer period. The period buffer register is used,
|
||||
* so the new period will be valid after the next update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
* \param _period New Timer/Counter period.
|
||||
*/
|
||||
#define TC_SetPeriodBuffered( _tc, _period ) ( (_tc)->PERBUF = (_period) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel A. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel A. The compare
|
||||
* channel A buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
* \param _compareValue New compare value for compare channel A.
|
||||
*/
|
||||
#define TC_SetCompareA( _tc, _compareValue ) ( (_tc)->CCABUF = (_compareValue) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel B. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel B. The compare
|
||||
* channel B buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
* \param _compareValue New compare value for compare channel B.
|
||||
*/
|
||||
#define TC_SetCompareB( _tc, _compareValue ) ( (_tc)->CCBBUF = (_compareValue) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel C. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel C. The compare
|
||||
* channel C buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
* \param _compareValue New compare value for compare channel C.
|
||||
*/
|
||||
#define TC_SetCompareC( _tc, _compareValue ) ( (_tc)->CCCBUF = (_compareValue) )
|
||||
|
||||
/*! \brief Set new compare value for compare channel D. ( Double buffered )
|
||||
*
|
||||
* This macro sets a new compare value for compare channel D. The compare
|
||||
* channel D buffer register is used, so the new period will be valid from the
|
||||
* next update condition.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
* \param _compareValue New compare value for compare channel D.
|
||||
*/
|
||||
#define TC_SetCompareD( _tc, _compareValue ) ( (_tc)->CCDBUF = (_compareValue) )
|
||||
|
||||
/*! \brief Test whether an overflow has occurred.
|
||||
*
|
||||
* The return value of this macro indicates if an overflow has occurred.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*
|
||||
* \return Non-zero if overflow flag is set, zero otherwise.
|
||||
*/
|
||||
#define TC_GetOverflowFlag( _tc ) ( (_tc)->INTFLAGS & TC0_OVFIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter overflow flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter overflow flag.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_ClearOverflowFlag( _tc ) ( (_tc)->INTFLAGS = TC0_OVFIF_bm )
|
||||
|
||||
/*! \brief Test whether an error has occurred.
|
||||
*
|
||||
* The return value of this macro indicates if an error has occurred.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*
|
||||
* \return Non-zero if the Timer error flag is set.
|
||||
*/
|
||||
#define TC_GetErrorFlag( _tc ) ( (_tc)->INTFLAGS & TC0_ERRIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter error flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter error flag.
|
||||
*
|
||||
* \param _tc Timer/Counter module instance.
|
||||
*/
|
||||
#define TC_ClearErrorFlag( _tc ) ( (_tc)->INTFLAGS = TC0_ERRIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel A.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel A.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel A and the
|
||||
* counter.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCAFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCAIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture A interrupt flag.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*/
|
||||
#define TC_ClearCCAFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCAIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel B.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel B.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel B and the
|
||||
* counter.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCBFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCBIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture B interrupt flag.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*/
|
||||
#define TC_ClearCCBFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCBIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel C.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel C.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel C and the
|
||||
* counter.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCCFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCCIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture C interrupt flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter compare or capture C interrupt flag.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*/
|
||||
#define TC_ClearCCCFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCCIF_bm )
|
||||
|
||||
/*! \brief Get the status for Compare or Capture channel D.
|
||||
*
|
||||
* When the TC is in Input Capture mode, the return value of this macro
|
||||
* indicates whether there is an unread input capture value available for
|
||||
* capture channel D.
|
||||
*
|
||||
* When the TC is in any other mode, the return value of this macro
|
||||
* indicates whether there has been a compare match between channel D and the
|
||||
* counter.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return Non-zero if Compare or capture has occured, zero otherwise.
|
||||
*/
|
||||
#define TC_GetCCDFlag( _tc ) ( (_tc)->INTFLAGS & TC0_CCDIF_bm )
|
||||
|
||||
/*! \brief Clears the Timer/Counter compare or capture D interrupt flag.
|
||||
*
|
||||
* This macro clears the Timer/Counter compare or capture D interrupt flag.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*/
|
||||
#define TC_ClearCCDFlag( _tc ) ( (_tc)->INTFLAGS = TC0_CCDIF_bm )
|
||||
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel A.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel A.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel A.
|
||||
*/
|
||||
#define TC_GetCaptureA( _tc ) ( (_tc)->CCA )
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel B.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel B.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 or 1 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel B.
|
||||
*/
|
||||
#define TC_GetCaptureB( _tc ) ( (_tc)->CCB )
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel C.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel C.
|
||||
*
|
||||
* \note The CCC channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel C.
|
||||
*/
|
||||
#define TC_GetCaptureC( _tc ) ( (_tc)->CCC )
|
||||
|
||||
/*! \brief Reads the first available input capture value for channel D.
|
||||
*
|
||||
* This macro returns the first available input capture value for
|
||||
* capture channel D.
|
||||
*
|
||||
* \note The CCD channel is not available on TCx1.
|
||||
*
|
||||
* \param _tc Timer/Counter 0 module instance.
|
||||
*
|
||||
* \return The first available input capture value for channel D.
|
||||
*/
|
||||
#define TC_GetCaptureD( _tc ) ( (_tc)->CCD )
|
||||
|
||||
|
||||
/* Prototyping of functions. Documentation can be found in source file. */
|
||||
|
||||
void TC0_ConfigClockSource( volatile TC0_t * tc, TC_CLKSEL_t clockSelection );
|
||||
void TC0_ConfigWGM( volatile TC0_t * tc, TC_WGMODE_t wgm );
|
||||
void TC0_ConfigInputCapture( volatile TC0_t * tc, TC_EVSEL_t eventSource );
|
||||
void TC0_EnableCCChannels( volatile TC0_t * tc, uint8_t enableMask );
|
||||
void TC0_DisableCCChannels( volatile TC0_t * tc, uint8_t disableMask );
|
||||
void TC0_SetOverflowIntLevel( volatile TC0_t * tc, TC_OVFINTLVL_t intLevel );
|
||||
void TC0_SetErrorIntLevel( volatile TC0_t * tc, TC_ERRINTLVL_t intLevel );
|
||||
void TC0_SetCCAIntLevel( volatile TC0_t * tc, TC_CCAINTLVL_t intLevel );
|
||||
void TC0_SetCCBIntLevel( volatile TC0_t * tc, TC_CCBINTLVL_t intLevel );
|
||||
void TC0_SetCCCIntLevel( volatile TC0_t * tc, TC_CCCINTLVL_t intLevel );
|
||||
void TC0_SetCCDIntLevel( volatile TC0_t * tc, TC_CCDINTLVL_t intLevel );
|
||||
void TC0_Reset( volatile TC0_t * tc );
|
||||
|
||||
void TC1_ConfigClockSource( volatile TC1_t * tc, TC_CLKSEL_t clockSelection );
|
||||
void TC1_ConfigWGM( volatile TC1_t * tc, TC_WGMODE_t wgm );
|
||||
void TC1_ConfigInputCapture( volatile TC1_t * tc, TC_EVSEL_t eventSource );
|
||||
void TC1_EnableCCChannels( volatile TC1_t * tc, uint8_t enableMask );
|
||||
void TC1_DisableCCChannels( volatile TC1_t * tc, uint8_t disableMask );
|
||||
void TC1_SetOverflowIntLevel( volatile TC1_t * tc, TC_OVFINTLVL_t intLevel );
|
||||
void TC1_SetErrorIntLevel( volatile TC1_t * tc, TC_ERRINTLVL_t intLevel );
|
||||
void TC1_SetCCAIntLevel( volatile TC1_t * tc, TC_CCAINTLVL_t intLevel );
|
||||
void TC1_SetCCBIntLevel( volatile TC1_t * tc, TC_CCBINTLVL_t intLevel );
|
||||
void TC1_SetCCCIntLevel( volatile TC1_t * tc, TC_CCCINTLVL_t intLevel );
|
||||
void TC1_SetCCDIntLevel( volatile TC1_t * tc, TC_CCDINTLVL_t intLevel );
|
||||
void TC1_Reset( volatile TC1_t * tc );
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,154 @@
|
||||
/* This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief This file implements some macros that makes the IAR C-compiler and
|
||||
* avr-gcc work with the same code base for the AVR architecture.
|
||||
*
|
||||
* \par Documentation
|
||||
* For comprehensive code documentation, supported compilers, compiler
|
||||
* settings and supported devices see readme.html
|
||||
*
|
||||
* \author
|
||||
* Atmel Corporation: http://www.atmel.com \n
|
||||
* Support email: avr@atmel.com
|
||||
*
|
||||
* $Revision: 1694 $
|
||||
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
|
||||
*
|
||||
* Copyright (c) 2008, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef COMPILER_AVR_H
|
||||
#define COMPILER_AVR_H
|
||||
|
||||
#ifndef F_CPU
|
||||
/*! \brief Define default CPU frequency, if this is not already defined. */
|
||||
#define F_CPU 2000000UL
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*! \brief This macro will protect the following code from interrupts. */
|
||||
#define AVR_ENTER_CRITICAL_REGION( ) uint8_t volatile saved_sreg = SREG; \
|
||||
cli();
|
||||
|
||||
/*! \brief This macro must always be used in conjunction with AVR_ENTER_CRITICAL_REGION
|
||||
* so the interrupts are enabled again.
|
||||
*/
|
||||
#define AVR_LEAVE_CRITICAL_REGION( ) SREG = saved_sreg;
|
||||
|
||||
#if defined( __ICCAVR__ )
|
||||
|
||||
#include <inavr.h>
|
||||
#include <ioavr.h>
|
||||
#include <intrinsics.h>
|
||||
#include <pgmspace.h>
|
||||
|
||||
#ifndef __HAS_ELPM__
|
||||
#define _MEMATTR __flash
|
||||
#else /* __HAS_ELPM__ */
|
||||
#define _MEMATTR __farflash
|
||||
#endif /* __HAS_ELPM__ */
|
||||
|
||||
/*! \brief Perform a delay of \c us microseconds.
|
||||
*
|
||||
* The macro F_CPU is supposed to be defined to a constant defining the CPU
|
||||
* clock frequency (in Hertz).
|
||||
*
|
||||
* The maximal possible delay is 262.14 ms / F_CPU in MHz.
|
||||
*
|
||||
* \note For the IAR compiler, currently F_CPU must be a
|
||||
* multiple of 1000000UL (1 MHz).
|
||||
*/
|
||||
#define delay_us( us ) ( __delay_cycles( ( F_CPU / 1000000UL ) * ( us ) ) )
|
||||
|
||||
/*! \brief Preprocessor magic.
|
||||
*
|
||||
* Some preprocessor magic to allow for a header file abstraction of
|
||||
* interrupt service routine declarations for the IAR compiler. This
|
||||
* requires the use of the C99 _Pragma() directive (rather than the
|
||||
* old #pragma one that could not be used as a macro replacement), as
|
||||
* well as two different levels of preprocessor concetanations in
|
||||
* order to do both, assign the correct interrupt vector name, as well
|
||||
* as construct a unique function name for the ISR.
|
||||
*
|
||||
* \note Do *NOT* try to reorder the macros below, as this will only
|
||||
* work in the given order.
|
||||
*/
|
||||
#define PRAGMA(x) _Pragma( #x )
|
||||
#define ISR(vec) PRAGMA( vector=vec ) __interrupt void handler_##vec(void)
|
||||
#define sei( ) (__enable_interrupt( ))
|
||||
#define cli( ) (__disable_interrupt( ))
|
||||
|
||||
/*! \brief Define the no operation macro. */
|
||||
#define nop( ) (__no_operation())
|
||||
|
||||
/*! \brief Define the watchdog reset macro. */
|
||||
#define watchdog_reset( ) (__watchdog_reset( ))
|
||||
|
||||
|
||||
#define INLINE PRAGMA( inline=forced ) static
|
||||
|
||||
#define FLASH_DECLARE(x) _MEMATTR x
|
||||
#define FLASH_STRING(x) ((_MEMATTR const char *)(x))
|
||||
#define FLASH_STRING_T char const _MEMATTR *
|
||||
#define FLASH_BYTE_ARRAY_T uint8_t const _MEMATTR *
|
||||
#define PGM_READ_BYTE(x) *(x)
|
||||
#define PGM_READ_WORD(x) *(x)
|
||||
|
||||
#define SHORTENUM /**/
|
||||
|
||||
#elif defined( __GNUC__ )
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
/*! \brief Define the delay_us macro for GCC. */
|
||||
#define delay_us( us ) (_delay_us( us ))
|
||||
|
||||
#define INLINE static inline
|
||||
|
||||
/*! \brief Define the no operation macro. */
|
||||
#define nop() do { __asm__ __volatile__ ("nop"); } while (0)
|
||||
|
||||
#define MAIN_TASK_PROLOGUE int
|
||||
|
||||
|
||||
#define MAIN_TASK_EPILOGUE() return -1;
|
||||
|
||||
#define SHORTENUM __attribute__ ((packed))
|
||||
|
||||
#else
|
||||
#error Compiler not supported.
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* DriveControl.cpp
|
||||
*
|
||||
* Created: 4/22/2014 8:54:20 PM
|
||||
* Author: corwin
|
||||
PE3 - Status LED
|
||||
*/
|
||||
|
||||
#define F_CPU 32000000UL
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include "Sabertooth.h"
|
||||
#include "Misc.h"
|
||||
|
||||
extern "C"{
|
||||
#include "usart_driver.h"
|
||||
#include "avr_compiler.h"
|
||||
};
|
||||
#define TIMEOUTMAX 5 //Time in seconds before state change back to init
|
||||
|
||||
/*! Define that selects the Usart used in example. */
|
||||
#define XBEEDIO0 PIN5_bm //PORTA
|
||||
#define SabertoothTx PIN3_bm //PORTD
|
||||
#define StatusLight PIN3_bm //PORTE
|
||||
|
||||
#define RECEIVE_PACKET_SIZE 6
|
||||
#define SEND_PACKET_SIZE 4
|
||||
|
||||
uint8_t sendArray[SEND_PACKET_SIZE] = {0x55, 0xaa, 0xf0};
|
||||
uint8_t receiveArray[RECEIVE_PACKET_SIZE];
|
||||
|
||||
USART_data_t USART_PC_Data;
|
||||
|
||||
bool IsRoving = false;
|
||||
|
||||
volatile long unsigned int TimeSinceInit = 0;
|
||||
long unsigned int TimePrevious = 0;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
SetXMEGA32MhzCalibrated(); //Set XMega to user 32Mhz internal oscillator with 32Khz crystal calibration
|
||||
|
||||
///////Setup Inputs and Outputs///////
|
||||
PORTC.DIRSET = (PIN5_bm | PIN6_bm | PIN7_bm | PIN3_bm); //Sets outputs on port C
|
||||
PORTC.DIRCLR = PIN2_bm; //Sets inputs on PORT C
|
||||
PORTA.DIRCLR = XBEEDIO0;
|
||||
PORTE.DIRSET = PIN3_bm; //Sets inputs on PORTA
|
||||
|
||||
|
||||
///////Initialize Serial Communcations///////
|
||||
SetupPCComms(); //Initializes PC Communications at 9600 baud0
|
||||
_delay_ms(500); //Delay to make sabertooth initialize
|
||||
Sabertooth DriveSaber(&USARTD0, &PORTD); //Initializes Sabertooth Communications at 9600 Baud
|
||||
|
||||
|
||||
//////////////////Timers///////////////
|
||||
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
|
||||
TCC0.CTRLB = TC_WGMODE_NORMAL_gc;
|
||||
TCC0.PER = 15625;
|
||||
TCC0.INTCTRLA = TC_OVFINTLVL_LO_gc;
|
||||
|
||||
TCD0.CTRLA = TC_CLKSEL_DIV1024_gc; //31250 counts per second with 32Mhz Processor
|
||||
TCD0.CTRLB = TC_WGMODE_NORMAL_gc;
|
||||
TCD0.PER = 31250;
|
||||
TCD0.INTCTRLA = TC_OVFINTLVL_LO_gc;
|
||||
///////////////////Timers//////////////
|
||||
|
||||
sei(); //Enables global interrupts so the interrupt serial can work
|
||||
|
||||
////Semi-global vars//////
|
||||
unsigned char BufferIdx = 0;
|
||||
const char XMegaID[] = "ID: MainDrive\r\n";
|
||||
enum MicroState{
|
||||
WaitForHost,
|
||||
Driving
|
||||
}XMegaState = WaitForHost;
|
||||
|
||||
while(1){
|
||||
|
||||
switch(XMegaState){
|
||||
case WaitForHost:
|
||||
for(int i = 0 ; XMegaID[i] != '\0'; i++){
|
||||
while(!USART_IsTXDataRegisterEmpty(&USARTC0));
|
||||
USART_PutChar(&USARTC0, XMegaID[i]);
|
||||
}
|
||||
_delay_ms(500);
|
||||
if(USART_RXBufferData_Available(&USART_PC_Data)){
|
||||
if(USART_RXBuffer_GetByte(&USART_PC_Data) == 'r'){
|
||||
XMegaState = Driving;
|
||||
USART_PutChar(&USARTC0, 'r');
|
||||
BufferIdx = 0;
|
||||
}
|
||||
}
|
||||
TimePrevious = TimeSinceInit;
|
||||
break;
|
||||
|
||||
case Driving:
|
||||
if(USART_RXBufferData_Available(&USART_PC_Data)){
|
||||
receiveArray[BufferIdx] = USART_RXBuffer_GetByte(&USART_PC_Data);
|
||||
BufferIdx++;
|
||||
}
|
||||
|
||||
if(BufferIdx == RECEIVE_PACKET_SIZE){
|
||||
FlushSerialBuffer(&USART_PC_Data);
|
||||
|
||||
if(IsRoving){
|
||||
if(receiveArray[4] == PCComsChecksum(receiveArray[1], receiveArray[2], receiveArray[3])){
|
||||
DriveSaber.ParsePacket(receiveArray[2], receiveArray[3]);
|
||||
STATUS1_SET();
|
||||
}
|
||||
else{STATUS1_CLR();}
|
||||
}else if(!IsRoving){
|
||||
_delay_ms(10);
|
||||
}
|
||||
|
||||
BufferIdx = 0;
|
||||
SendDriveControlStatus(&USARTC0, IsRoving, false);
|
||||
TimePrevious = TimeSinceInit;
|
||||
}
|
||||
|
||||
|
||||
if((TimeSinceInit - TimePrevious) > TIMEOUTMAX){
|
||||
DriveSaber.StopAll();
|
||||
XMegaState = WaitForHost;
|
||||
TimePrevious = TimeSinceInit;
|
||||
}
|
||||
break;
|
||||
|
||||
};
|
||||
|
||||
if(!IsRoving){
|
||||
DriveSaber.StopAll();
|
||||
}
|
||||
|
||||
if((PORTA.IN & XBEEDIO0)){
|
||||
ERROR_CLR();
|
||||
IsRoving = true;
|
||||
}else if((!(PORTA.IN & XBEEDIO0))){
|
||||
ERROR_SET();
|
||||
IsRoving = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ISR(USARTC0_RXC_vect){
|
||||
USART_RXComplete(&USART_PC_Data);
|
||||
}
|
||||
|
||||
|
||||
ISR(USARTC0_DRE_vect){
|
||||
USART_DataRegEmpty(&USART_PC_Data);
|
||||
}
|
||||
|
||||
ISR(TCC0_OVF_vect){
|
||||
if(IsRoving){
|
||||
JUDGELED_TOGGLE();
|
||||
}else if(!IsRoving){
|
||||
JUDGELED_SET();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ISR(TCD0_OVF_vect){
|
||||
STATUS2_TOGGLE();
|
||||
TimeSinceInit++;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,320 @@
|
||||
/* This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief
|
||||
* XMEGA USART driver source file.
|
||||
*
|
||||
* This file contains the function implementations the XMEGA interrupt
|
||||
* and polled USART driver.
|
||||
*
|
||||
* The driver is not intended for size and/or speed critical code, since
|
||||
* most functions are just a few lines of code, and the function call
|
||||
* overhead would decrease code performance. The driver is intended for
|
||||
* rapid prototyping and documentation purposes for getting started with
|
||||
* the XMEGA ADC module.
|
||||
*
|
||||
* For size and/or speed critical code, it is recommended to copy the
|
||||
* function contents directly into your application instead of making
|
||||
* a function call.
|
||||
*
|
||||
* Some functions use the following construct:
|
||||
* "some_register = ... | (some_parameter ? SOME_BIT_bm : 0) | ..."
|
||||
* Although the use of the ternary operator ( if ? then : else ) is discouraged,
|
||||
* in some occasions the operator makes it possible to write pretty clean and
|
||||
* neat code. In this driver, the construct is used to set or not set a
|
||||
* configuration bit based on a boolean input parameter, such as
|
||||
* the "some_parameter" in the example above.
|
||||
*
|
||||
* \par Application note:
|
||||
* AVR1307: Using the XMEGA USART
|
||||
*
|
||||
* \par Documentation
|
||||
* For comprehensive code documentation, supported compilers, compiler
|
||||
* settings and supported devices see readme.html
|
||||
*
|
||||
* \author
|
||||
* Atmel Corporation: http://www.atmel.com \n
|
||||
* Support email: avr@atmel.com
|
||||
*
|
||||
* $Revision: 1694 $
|
||||
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
|
||||
*
|
||||
* Copyright (c) 2008, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
#include "usart_driver.h"
|
||||
|
||||
|
||||
|
||||
/*! \brief Initializes buffer and selects what USART module to use.
|
||||
*
|
||||
* Initializes receive and transmit buffer and selects what USART module to use,
|
||||
* and stores the data register empty interrupt level.
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance.
|
||||
* \param usart The USART module.
|
||||
* \param dreIntLevel Data register empty interrupt level.
|
||||
*/
|
||||
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
|
||||
USART_t * usart,
|
||||
USART_DREINTLVL_t dreIntLevel)
|
||||
{
|
||||
usart_data->usart = usart;
|
||||
usart_data->dreIntLevel = dreIntLevel;
|
||||
|
||||
usart_data->buffer.RX_Tail = 0;
|
||||
usart_data->buffer.RX_Head = 0;
|
||||
usart_data->buffer.TX_Tail = 0;
|
||||
usart_data->buffer.TX_Head = 0;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Set USART DRE interrupt level.
|
||||
*
|
||||
* Set the interrupt level on Data Register interrupt.
|
||||
*
|
||||
* \note Changing the DRE interrupt level in the interrupt driver while it is
|
||||
* running will not change the DRE interrupt level in the USART before the
|
||||
* DRE interrupt have been disabled and enabled again.
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance
|
||||
* \param dreIntLevel Interrupt level of the DRE interrupt.
|
||||
*/
|
||||
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
|
||||
USART_DREINTLVL_t dreIntLevel)
|
||||
{
|
||||
usart_data->dreIntLevel = dreIntLevel;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Test if there is data in the transmitter software buffer.
|
||||
*
|
||||
* This function can be used to test if there is free space in the transmitter
|
||||
* software buffer.
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance.
|
||||
*
|
||||
* \retval true There is data in the receive buffer.
|
||||
* \retval false The receive buffer is empty.
|
||||
*/
|
||||
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data)
|
||||
{
|
||||
/* Make copies to make sure that volatile access is specified. */
|
||||
uint8_t tempHead = (usart_data->buffer.TX_Head + 1) & USART_TX_BUFFER_MASK;
|
||||
uint8_t tempTail = usart_data->buffer.TX_Tail;
|
||||
|
||||
/* There are data left in the buffer unless Head and Tail are equal. */
|
||||
return (tempHead != tempTail);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*! \brief Put data (5-8 bit character).
|
||||
*
|
||||
* Stores data byte in TX software buffer and enables DRE interrupt if there
|
||||
* is free space in the TX software buffer.
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance.
|
||||
* \param data The data to send.
|
||||
*/
|
||||
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data)
|
||||
{
|
||||
uint8_t tempCTRLA;
|
||||
uint8_t tempTX_Head;
|
||||
bool TXBuffer_FreeSpace;
|
||||
USART_Buffer_t * TXbufPtr;
|
||||
|
||||
TXbufPtr = &usart_data->buffer;
|
||||
TXBuffer_FreeSpace = USART_TXBuffer_FreeSpace(usart_data);
|
||||
|
||||
|
||||
if(TXBuffer_FreeSpace)
|
||||
{
|
||||
tempTX_Head = TXbufPtr->TX_Head;
|
||||
TXbufPtr->TX[tempTX_Head]= data;
|
||||
/* Advance buffer head. */
|
||||
TXbufPtr->TX_Head = (tempTX_Head + 1) & USART_TX_BUFFER_MASK;
|
||||
|
||||
/* Enable DRE interrupt. */
|
||||
tempCTRLA = usart_data->usart->CTRLA;
|
||||
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | usart_data->dreIntLevel;
|
||||
usart_data->usart->CTRLA = tempCTRLA;
|
||||
}
|
||||
return TXBuffer_FreeSpace;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*! \brief Test if there is data in the receive software buffer.
|
||||
*
|
||||
* This function can be used to test if there is data in the receive software
|
||||
* buffer.
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance
|
||||
*
|
||||
* \retval true There is data in the receive buffer.
|
||||
* \retval false The receive buffer is empty.
|
||||
*/
|
||||
bool USART_RXBufferData_Available(USART_data_t * usart_data)
|
||||
{
|
||||
/* Make copies to make sure that volatile access is specified. */
|
||||
uint8_t tempHead = usart_data->buffer.RX_Head;
|
||||
uint8_t tempTail = usart_data->buffer.RX_Tail;
|
||||
|
||||
/* There are data left in the buffer unless Head and Tail are equal. */
|
||||
return (tempHead != tempTail);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*! \brief Get received data (5-8 bit character).
|
||||
*
|
||||
* The function USART_RXBufferData_Available should be used before this
|
||||
* function is used to ensure that data is available.
|
||||
*
|
||||
* Returns data from RX software buffer.
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance.
|
||||
*
|
||||
* \return Received data.
|
||||
*/
|
||||
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data)
|
||||
{
|
||||
USART_Buffer_t * bufPtr;
|
||||
uint8_t ans;
|
||||
|
||||
bufPtr = &usart_data->buffer;
|
||||
ans = (bufPtr->RX[bufPtr->RX_Tail]);
|
||||
|
||||
/* Advance buffer tail. */
|
||||
bufPtr->RX_Tail = (bufPtr->RX_Tail + 1) & USART_RX_BUFFER_MASK;
|
||||
|
||||
return ans;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*! \brief RX Complete Interrupt Service Routine.
|
||||
*
|
||||
* RX Complete Interrupt Service Routine.
|
||||
* Stores received data in RX software buffer.
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance.
|
||||
*/
|
||||
bool USART_RXComplete(USART_data_t * usart_data)
|
||||
{
|
||||
USART_Buffer_t * bufPtr;
|
||||
bool ans;
|
||||
|
||||
bufPtr = &usart_data->buffer;
|
||||
/* Advance buffer head. */
|
||||
uint8_t tempRX_Head = (bufPtr->RX_Head + 1) & USART_RX_BUFFER_MASK;
|
||||
|
||||
/* Check for overflow. */
|
||||
uint8_t tempRX_Tail = bufPtr->RX_Tail;
|
||||
uint8_t data = usart_data->usart->DATA;
|
||||
|
||||
if (tempRX_Head == tempRX_Tail) {
|
||||
ans = false;
|
||||
}else{
|
||||
ans = true;
|
||||
usart_data->buffer.RX[usart_data->buffer.RX_Head] = data;
|
||||
usart_data->buffer.RX_Head = tempRX_Head;
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*! \brief Data Register Empty Interrupt Service Routine.
|
||||
*
|
||||
* Data Register Empty Interrupt Service Routine.
|
||||
* Transmits one byte from TX software buffer. Disables DRE interrupt if buffer
|
||||
* is empty. Argument is pointer to USART (USART_data_t).
|
||||
*
|
||||
* \param usart_data The USART_data_t struct instance.
|
||||
*/
|
||||
void USART_DataRegEmpty(USART_data_t * usart_data)
|
||||
{
|
||||
USART_Buffer_t * bufPtr;
|
||||
bufPtr = &usart_data->buffer;
|
||||
|
||||
/* Check if all data is transmitted. */
|
||||
uint8_t tempTX_Tail = usart_data->buffer.TX_Tail;
|
||||
if (bufPtr->TX_Head == tempTX_Tail){
|
||||
/* Disable DRE interrupts. */
|
||||
uint8_t tempCTRLA = usart_data->usart->CTRLA;
|
||||
tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc;
|
||||
usart_data->usart->CTRLA = tempCTRLA;
|
||||
|
||||
}else{
|
||||
/* Start transmitting. */
|
||||
uint8_t data = bufPtr->TX[usart_data->buffer.TX_Tail];
|
||||
usart_data->usart->DATA = data;
|
||||
|
||||
/* Advance buffer tail. */
|
||||
bufPtr->TX_Tail = (bufPtr->TX_Tail + 1) & USART_TX_BUFFER_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Put data (9 bit character).
|
||||
*
|
||||
* Use the function USART_IsTXDataRegisterEmpty before using this function to
|
||||
* put 9 bit character to the TX register.
|
||||
*
|
||||
* \param usart The USART module.
|
||||
* \param data The data to send.
|
||||
*/
|
||||
void USART_NineBits_PutChar(USART_t * usart, uint16_t data)
|
||||
{
|
||||
if(data & 0x0100) {
|
||||
usart->CTRLB |= USART_TXB8_bm;
|
||||
}else {
|
||||
usart->CTRLB &= ~USART_TXB8_bm;
|
||||
}
|
||||
|
||||
usart->DATA = (data & 0x00FF);
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Get received data (9 bit character).
|
||||
*
|
||||
* This function reads out the received 9 bit character (uint16_t).
|
||||
* Use the function USART_IsRXComplete to check if anything is received.
|
||||
*
|
||||
* \param usart The USART module.
|
||||
*
|
||||
* \retval Received data.
|
||||
*/
|
||||
uint16_t USART_NineBits_GetChar(USART_t * usart)
|
||||
{
|
||||
if(usart->CTRLB & USART_RXB8_bm) {
|
||||
return(0x0100 | usart->DATA);
|
||||
}else {
|
||||
return(usart->DATA);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,306 @@
|
||||
/* This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief XMEGA USART driver header file.
|
||||
*
|
||||
* This file contains the function prototypes and enumerator definitions
|
||||
* for various configuration parameters for the XMEGA USART driver.
|
||||
*
|
||||
* The driver is not intended for size and/or speed critical code, since
|
||||
* most functions are just a few lines of code, and the function call
|
||||
* overhead would decrease code performance. The driver is intended for
|
||||
* rapid prototyping and documentation purposes for getting started with
|
||||
* the XMEGA ADC module.
|
||||
*
|
||||
* For size and/or speed critical code, it is recommended to copy the
|
||||
* function contents directly into your application instead of making
|
||||
* a function call.
|
||||
*
|
||||
* \par Application note:
|
||||
* AVR1307: Using the XMEGA USART
|
||||
*
|
||||
* \par Documentation
|
||||
* For comprehensive code documentation, supported compilers, compiler
|
||||
* settings and supported devices see readme.html
|
||||
*
|
||||
* \author
|
||||
* Atmel Corporation: http://www.atmel.com \n
|
||||
* Support email: avr@atmel.com
|
||||
*
|
||||
* $Revision: 1694 $
|
||||
* $Date: 2008-07-29 14:21:58 +0200 (ti, 29 jul 2008) $ \n
|
||||
*
|
||||
* Copyright (c) 2008, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
#ifndef USART_DRIVER_H
|
||||
#define USART_DRIVER_H
|
||||
|
||||
#include "avr_compiler.h"
|
||||
|
||||
/* USART buffer defines. */
|
||||
|
||||
/* \brief Receive buffer size: 2,4,8,16,32,64,128 or 256 bytes. */
|
||||
#define USART_RX_BUFFER_SIZE 4
|
||||
/* \brief Transmit buffer size: 2,4,8,16,32,64,128 or 256 bytes */
|
||||
#define USART_TX_BUFFER_SIZE 4
|
||||
/* \brief Receive buffer mask. */
|
||||
#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )
|
||||
/* \brief Transmit buffer mask. */
|
||||
#define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )
|
||||
|
||||
|
||||
#if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )
|
||||
#error RX buffer size is not a power of 2
|
||||
#endif
|
||||
#if ( USART_TX_BUFFER_SIZE & USART_TX_BUFFER_MASK )
|
||||
#error TX buffer size is not a power of 2
|
||||
#endif
|
||||
|
||||
|
||||
/* \brief USART transmit and receive ring buffer. */
|
||||
typedef struct USART_Buffer
|
||||
{
|
||||
/* \brief Receive buffer. */
|
||||
volatile uint8_t RX[USART_RX_BUFFER_SIZE];
|
||||
/* \brief Transmit buffer. */
|
||||
volatile uint8_t TX[USART_TX_BUFFER_SIZE];
|
||||
/* \brief Receive buffer head. */
|
||||
volatile uint8_t RX_Head;
|
||||
/* \brief Receive buffer tail. */
|
||||
volatile uint8_t RX_Tail;
|
||||
/* \brief Transmit buffer head. */
|
||||
volatile uint8_t TX_Head;
|
||||
/* \brief Transmit buffer tail. */
|
||||
volatile uint8_t TX_Tail;
|
||||
} USART_Buffer_t;
|
||||
|
||||
|
||||
/*! \brief Struct used when interrupt driven driver is used.
|
||||
*
|
||||
* Struct containing pointer to a usart, a buffer and a location to store Data
|
||||
* register interrupt level temporary.
|
||||
*/
|
||||
typedef struct Usart_and_buffer
|
||||
{
|
||||
/* \brief Pointer to USART module to use. */
|
||||
USART_t * usart;
|
||||
/* \brief Data register empty interrupt level. */
|
||||
USART_DREINTLVL_t dreIntLevel;
|
||||
/* \brief Data buffer. */
|
||||
USART_Buffer_t buffer;
|
||||
} USART_data_t;
|
||||
|
||||
|
||||
/* Macros. */
|
||||
|
||||
/*! \brief Macro that sets the USART frame format.
|
||||
*
|
||||
* Sets the frame format, Frame Size, parity mode and number of stop bits.
|
||||
*
|
||||
* \param _usart Pointer to the USART module
|
||||
* \param _charSize The character size. Use USART_CHSIZE_t type.
|
||||
* \param _parityMode The parity Mode. Use USART_PMODE_t type.
|
||||
* \param _twoStopBits Enable two stop bit mode. Use bool type.
|
||||
*/
|
||||
#define USART_Format_Set(_usart, _charSize, _parityMode, _twoStopBits) \
|
||||
(_usart)->CTRLC = (uint8_t) _charSize | _parityMode | \
|
||||
(_twoStopBits ? USART_SBMODE_bm : 0)
|
||||
|
||||
|
||||
/*! \brief Set USART baud rate.
|
||||
*
|
||||
* Sets the USART's baud rate register.
|
||||
*
|
||||
* UBRR_Value : Value written to UBRR
|
||||
* ScaleFactor : Time Base Generator Scale Factor
|
||||
*
|
||||
* Equation for calculation of BSEL value in asynchronous normal speed mode:
|
||||
* If ScaleFactor >= 0
|
||||
* BSEL = ((I/O clock frequency)/(2^(ScaleFactor)*16*Baudrate))-1
|
||||
* If ScaleFactor < 0
|
||||
* BSEL = (1/(2^(ScaleFactor)*16))*(((I/O clock frequency)/Baudrate)-1)
|
||||
*
|
||||
* \note See XMEGA manual for equations for calculation of BSEL value in other
|
||||
* modes.
|
||||
*
|
||||
* \param _usart Pointer to the USART module.
|
||||
* \param _bselValue Value to write to BSEL part of Baud control register.
|
||||
* Use uint16_t type.
|
||||
* \param _bScaleFactor USART baud rate scale factor.
|
||||
* Use uint8_t type
|
||||
*/
|
||||
#define USART_Baudrate_Set(_usart, _bselValue, _bScaleFactor) \
|
||||
(_usart)->BAUDCTRLA =(uint8_t)_bselValue; \
|
||||
(_usart)->BAUDCTRLB =(_bScaleFactor << USART_BSCALE0_bp)|(_bselValue >> 8)
|
||||
|
||||
|
||||
/*! \brief Enable USART receiver.
|
||||
*
|
||||
* \param _usart Pointer to the USART module
|
||||
*/
|
||||
#define USART_Rx_Enable(_usart) ((_usart)->CTRLB |= USART_RXEN_bm)
|
||||
|
||||
|
||||
/*! \brief Disable USART receiver.
|
||||
*
|
||||
* \param _usart Pointer to the USART module.
|
||||
*/
|
||||
#define USART_Rx_Disable(_usart) ((_usart)->CTRLB &= ~USART_RXEN_bm)
|
||||
|
||||
|
||||
/*! \brief Enable USART transmitter.
|
||||
*
|
||||
* \param _usart Pointer to the USART module.
|
||||
*/
|
||||
#define USART_Tx_Enable(_usart) ((_usart)->CTRLB |= USART_TXEN_bm)
|
||||
|
||||
|
||||
/*! \brief Disable USART transmitter.
|
||||
*
|
||||
* \param _usart Pointer to the USART module.
|
||||
*/
|
||||
#define USART_Tx_Disable(_usart) ((_usart)->CTRLB &= ~USART_TXEN_bm)
|
||||
|
||||
|
||||
/*! \brief Set USART RXD interrupt level.
|
||||
*
|
||||
* Sets the interrupt level on RX Complete interrupt.
|
||||
*
|
||||
* \param _usart Pointer to the USART module.
|
||||
* \param _rxdIntLevel Interrupt level of the RXD interrupt.
|
||||
* Use USART_RXCINTLVL_t type.
|
||||
*/
|
||||
#define USART_RxdInterruptLevel_Set(_usart, _rxdIntLevel) \
|
||||
((_usart)->CTRLA = ((_usart)->CTRLA & ~USART_RXCINTLVL_gm) | _rxdIntLevel)
|
||||
|
||||
|
||||
/*! \brief Set USART TXD interrupt level.
|
||||
*
|
||||
* Sets the interrupt level on TX Complete interrupt.
|
||||
*
|
||||
* \param _usart Pointer to the USART module.
|
||||
* \param _txdIntLevel Interrupt level of the TXD interrupt.
|
||||
* Use USART_TXCINTLVL_t type.
|
||||
*/
|
||||
#define USART_TxdInterruptLevel_Set(_usart, _txdIntLevel) \
|
||||
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_TXCINTLVL_gm) | _txdIntLevel
|
||||
|
||||
|
||||
|
||||
/*! \brief Set USART DRE interrupt level.
|
||||
*
|
||||
* Sets the interrupt level on Data Register interrupt.
|
||||
*
|
||||
* \param _usart Pointer to the USART module.
|
||||
* \param _dreIntLevel Interrupt level of the DRE interrupt.
|
||||
* Use USART_DREINTLVL_t type.
|
||||
*/
|
||||
#define USART_DreInterruptLevel_Set(_usart, _dreIntLevel) \
|
||||
(_usart)->CTRLA = ((_usart)->CTRLA & ~USART_DREINTLVL_gm) | _dreIntLevel
|
||||
|
||||
|
||||
/*! \brief Set the mode the USART run in.
|
||||
*
|
||||
* Set the mode the USART run in. The default mode is asynchronous mode.
|
||||
*
|
||||
* \param _usart Pointer to the USART module register section.
|
||||
* \param _usartMode Selects the USART mode. Use USART_CMODE_t type.
|
||||
*
|
||||
* USART modes:
|
||||
* - 0x0 : Asynchronous mode.
|
||||
* - 0x1 : Synchronous mode.
|
||||
* - 0x2 : IrDA mode.
|
||||
* - 0x3 : Master SPI mode.
|
||||
*/
|
||||
#define USART_SetMode(_usart, _usartMode) \
|
||||
((_usart)->CTRLC = ((_usart)->CTRLC & (~USART_CMODE_gm)) | _usartMode)
|
||||
|
||||
|
||||
|
||||
/*! \brief Check if data register empty flag is set.
|
||||
*
|
||||
* \param _usart The USART module.
|
||||
*/
|
||||
#define USART_IsTXDataRegisterEmpty(_usart) (((_usart)->STATUS & USART_DREIF_bm) != 0)
|
||||
|
||||
|
||||
|
||||
/*! \brief Put data (5-8 bit character).
|
||||
*
|
||||
* Use the macro USART_IsTXDataRegisterEmpty before using this function to
|
||||
* put data to the TX register.
|
||||
*
|
||||
* \param _usart The USART module.
|
||||
* \param _data The data to send.
|
||||
*/
|
||||
#define USART_PutChar(_usart, _data) ((_usart)->DATA = _data)
|
||||
|
||||
|
||||
|
||||
/*! \brief Checks if the RX complete interrupt flag is set.
|
||||
*
|
||||
* Checks if the RX complete interrupt flag is set.
|
||||
*
|
||||
* \param _usart The USART module.
|
||||
*/
|
||||
#define USART_IsRXComplete(_usart) (((_usart)->STATUS & USART_RXCIF_bm) != 0)
|
||||
|
||||
|
||||
|
||||
|
||||
/*! \brief Get received data (5-8 bit character).
|
||||
*
|
||||
* This macro reads out the RX register.
|
||||
* Use the macro USART_RX_Complete to check if anything is received.
|
||||
*
|
||||
* \param _usart The USART module.
|
||||
*
|
||||
* \retval Received data.
|
||||
*/
|
||||
#define USART_GetChar(_usart) ((_usart)->DATA)
|
||||
|
||||
|
||||
/* Functions for interrupt driven driver. */
|
||||
void USART_InterruptDriver_Initialize(USART_data_t * usart_data,
|
||||
USART_t * usart,
|
||||
USART_DREINTLVL_t dreIntLevel );
|
||||
|
||||
void USART_InterruptDriver_DreInterruptLevel_Set(USART_data_t * usart_data,
|
||||
USART_DREINTLVL_t dreIntLevel);
|
||||
|
||||
bool USART_TXBuffer_FreeSpace(USART_data_t * usart_data);
|
||||
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data);
|
||||
bool USART_RXBufferData_Available(USART_data_t * usart_data);
|
||||
uint8_t USART_RXBuffer_GetByte(USART_data_t * usart_data);
|
||||
bool USART_RXComplete(USART_data_t * usart_data);
|
||||
void USART_DataRegEmpty(USART_data_t * usart_data);
|
||||
|
||||
/* Functions for polled driver. */
|
||||
void USART_NineBits_PutChar(USART_t * usart, uint16_t data);
|
||||
uint16_t USART_NineBits_GetChar(USART_t * usart);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,3 @@
|
||||
Firmware for all final boards should go here.
|
||||
|
||||
All firmware developed using Atmel Studio 6.2.
|
||||
Reference in New Issue
Block a user