Updated folder names

This commit is contained in:
2017-11-29 12:51:53 -08:00
parent cb3ce5dafc
commit 51b0102711
397 changed files with 0 additions and 0 deletions

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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:

View File

@@ -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:

View File

@@ -0,0 +1,12 @@
################################################################################
# Automatically-generated file. Do not edit or delete the file
################################################################################
DriveControl.cpp
Misc.cpp
Sabertooth.cpp
usart_driver.c

View File

@@ -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:

View File

@@ -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

View File

@@ -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++;
}

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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_ */

View File

@@ -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.
}

View File

@@ -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__

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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++;
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -0,0 +1,3 @@
Firmware for all final boards should go here.
All firmware developed using Atmel Studio 6.2.