Compare commits

...

1059 commits

Author SHA1 Message Date
Ha Thach
05e83bcb71
Merge pull request #373 from adafruit/add-issue-template
add issue template
2025-08-07 17:09:11 +07:00
hathach
0a48a55866
add issue template 2025-08-07 15:33:58 +07:00
Ha Thach
6653744ce4
Merge pull request #370 from adafruit/fix-TRRS-Trinkey-variant-name
fix variant folder name case for trrstrinkey_m0
2024-12-25 16:10:07 +07:00
hathach
592ec7707d
fix variant folder name case for trrstrinkey_m0 2024-12-25 15:06:00 +07:00
Mikey Sklar
bb552819ba
Pixel Trinkey Analog JST pin (#369)
Adding analog support to the 3-pin JST A6.
2024-09-18 13:54:26 -04:00
Ha Thach
8859387343
Merge pull request #367 from DennisErnst/master
Fix hangs when transfer errors occur
2024-09-05 19:00:38 +07:00
hathach
c8287a11c6
clean up format 2024-09-05 18:47:37 +07:00
Dennis Ernst
6e5580d9b2
Add files via upload 2024-07-21 10:50:03 -07:00
Dennis Ernst
ccfc7db988
Add files via upload 2024-07-18 12:43:41 -07:00
Ha Thach
ce20340620
Merge pull request #339 from yosinski/master
Add .ramfunc attribute to flash_with_bootloader.ld to enable keeping functions in RAM
2024-07-18 17:57:17 +07:00
Ha Thach
6ed425f871
Merge pull request #362 from nerdyscout/fix/update_TinyUSB
update to 3.1.5 of Adafruit TinyUSB
2024-07-18 17:47:55 +07:00
Liz
576d6271ed Revert "Merge pull request #363 from BlitzCityDIY/trrs_update"
This reverts commit e7a9d6d762, reversing
changes made to 9bb5b21093.
2024-06-25 19:14:24 -04:00
Liz
726453fa91 Revert "Merge pull request #364 from BlitzCityDIY/master"
This reverts commit 3044845d73, reversing
changes made to e7a9d6d762.
2024-06-25 19:14:19 -04:00
Liz
3044845d73
Merge pull request #364 from BlitzCityDIY/master
two more TRRS
2024-06-25 18:59:56 -04:00
Liz
12e2013e2b two more TRRS 2024-06-25 18:52:49 -04:00
e7a9d6d762
Merge pull request #363 from BlitzCityDIY/trrs_update
updating TRRS Trinkey naming for case sensitivity
2024-06-25 16:21:58 -05:00
Liz
463eb00619 updating TRRS Trinkey naming for case sensitivity 2024-06-25 16:30:51 -04:00
nerdyscout
c0c7bd0bcb update to 3.1.5 2024-06-10 13:29:54 +02:00
Ha Thach
9bb5b21093
Merge pull request #361 from adafruit/bump-1.7.16
bump up version 1.7.16
2024-05-22 09:52:13 +07:00
Ha Thach
3a527f8e85
bump up version 1.7.16 2024-05-22 09:45:15 +07:00
ladyada
7473729af3 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2024-05-21 20:23:06 -04:00
ladyada
b64fe90c4a fix for rev B hardware
cc @blitzcitydiy
2024-05-21 20:23:02 -04:00
Ha Thach
4693b93d69
Merge pull request #360 from adafruit/minor-update
update makeboards.py, fix board name typo
2024-05-17 10:09:16 +07:00
hathach
ffb6935392
update makeboards.py, fix board name typo 2024-05-17 09:58:01 +07:00
Ha Thach
9dc3465b47
Merge pull request #359 from adafruit/bump-version-1.7.15
bump up version to 1.7.15
2024-05-17 09:38:04 +07:00
hathach
61da91c518
bump up version to 1.7.15 2024-05-17 09:24:46 +07:00
Ha Thach
ac9e81e58e
Merge pull request #358 from rcross-lc/master
Use the correct openocd flash driver for ATSAMD51 devices
2024-05-15 16:54:15 +07:00
ladyada
72e88b41ea many variant trinks! 2024-05-11 13:10:07 -04:00
ladyada
5a5790412c hardware design rev B 2024-05-11 13:09:32 -04:00
Robert Cross
634b97cc40 Use the correct openocd flash driver for ATSAMD51 devices
see openocd docs ( https://github.com/openocd-org/openocd/blob/v0.11.0/doc/openocd.texi#L5827C1-L5827C54 )
2024-05-09 16:44:23 -04:00
Liz
b2358faa51
increase version for 1.7.14 release 2024-03-26 08:38:21 -04:00
Liz
1a8763701d
Merge pull request #355 from adafruit/sht4xtrinkey
Tested SHT4x Trinkey
2024-03-25 08:22:29 -04:00
hathach
e82192ca1a
update makeboards.py 2024-03-13 17:42:41 +07:00
ladyada
9b1b3ba02d Tested SHT4x Trinkey 2024-03-05 11:00:29 -05:00
Ha Thach
0bf32589c9
Merge pull request #328 from caternuson/iss320_dotstar
add PIN_DOTSTAR_CLOCK
2024-03-05 12:58:34 +07:00
Ha Thach
e43b1ef3aa
Merge pull request #347 from IanBurwell/ib/pyportal-ss-fix
PyPortal: fix SS pin definition
2024-03-05 12:58:12 +07:00
Ha Thach
4c6cc0ef6f
Merge pull request #354 from adafruit/update-tinyusb
Update tinyusb to v3.1
2024-03-05 12:56:23 +07:00
hathach
c1b79a8231
udpate tinyusb to v3.1 2024-03-05 12:44:54 +07:00
Ha Thach
767168482d
Merge pull request #353 from adafruit/update-libraries
update tinyusb and zerodma libraries
2024-02-06 16:17:17 +07:00
hathach
8619fd9190 update tinyusb and zerodma libraries 2024-02-06 15:22:24 +07:00
Ha Thach
21ac7624c9
Merge pull request #351 from adafruit/fix-sendStringDescriptor
fix sendStringDescriptor() maxlen uitn8_t to uint32_t
2023-11-27 18:32:44 +07:00
hathach
f85cf1b8a3 fix sendStringDescriptor() maxlen uitn8_t to uint32_t 2023-11-27 11:54:09 +07:00
Ha Thach
e2b78cbd36
Merge pull request #348 from adafruit/hathach-patch-1
increase version for release 1.7.13
2023-06-23 10:48:43 +07:00
Ha Thach
eebe841a7d
increase version for release 1.7.13 2023-06-23 10:41:05 +07:00
Ha Thach
164decde3b
Merge pull request #346 from adafruit/ide2-debug
Arduino IDE v2 debuging suport
2023-06-23 10:38:54 +07:00
hathach
bc76c89c90 explicit specify openocd 0.11.0-arduino2 2023-06-23 09:55:55 +07:00
Ian Burwell
b0322762a5 pyportal: add SS pin 2023-06-22 20:34:16 -04:00
hathach
df5b8c6054 comment out jlink over openocd since IDE does not pick that up and could cause questions 2023-06-22 23:28:21 +07:00
hathach
c3d53add36 add support for jlink as transport for openocd
though menu selection does not seem to work with debug script. Though
this is probably IDE issue.
2023-06-22 23:05:24 +07:00
hathach
c9e285c482 fix ci, rename script 2023-06-22 19:19:18 +07:00
hathach
41cd7a70e1 adding samd51 debug, still wip 2023-06-22 16:42:55 +07:00
hathach
463beee02d debug work with itsybitsy and pico probe 2023-06-22 12:25:24 +07:00
hathach
2f8f40c05c more script update 2023-06-21 23:07:26 +07:00
hathach
ef8903ac8e move makboards.py scripts tools/, refactor to use f-string 2023-06-21 21:34:19 +07:00
Ha Thach
313ef47993
Merge pull request #344 from adafruit/release-1.7.12
fix incorrect PID for pIRKey board (conflict with M0 trinket)
2023-05-23 11:14:01 +07:00
hathach
c307d378eb
fix incorrect PID for pIRKey board (conflict with M0 trinket) 2023-05-23 10:12:41 +07:00
dherrada
159e3c31ed Update CI action versions 2023-05-12 11:24:12 -04:00
Jason Yosinski
a6b4ae7738 Added .ramfunc attribute to linker script to enable keeping functions in RAM. 2022-12-20 11:27:08 -08:00
Ha Thach
0fd44a54b7
Merge pull request #278 from rlcamp/master
Fix typo in samd51 clock init which was preventing XOSC1K from being used in RTCCTRL
2022-11-15 09:24:47 +07:00
Ha Thach
7812526590
Merge pull request #338 from rlcamp/ltofix
Prevent LTO from omitting the ISR vector table
2022-11-15 09:02:35 +07:00
Richard Campbell
7ca484ac85 Prevent LTO from omitting the ISR vector table for SAMD21 too 2022-11-13 22:13:30 -08:00
Richard Campbell
88bafcc09e Prevent LTO from omitting the ISR vector table 2022-11-13 10:53:59 -08:00
rlcamp
22176f8c20
Merge branch 'adafruit:master' into master 2022-11-13 10:35:57 -08:00
Ha Thach
024eaa50d1
Merge pull request #337 from adafruit/release-1.7.11
Remove ARDUINO_SAMD_ZERO for some boards
2022-11-01 12:09:42 +07:00
hathach
66ebeeb4dc
bump version to 1.7.11 2022-11-01 11:51:41 +07:00
hathach
7c47afb817
remove ARDUINO_SAMD_ZERO from some boards due to fastled issue 2022-11-01 11:51:14 +07:00
hathach
ad12ce969f fix possible windows bossac tool 2022-10-12 21:42:23 +07:00
Tim Vrakas
c2d4153929
Proposal to improve WVariant part number define logic (#326)
* add ethernet interupt dummy handler

* fix timer definitions for -N and -P SAMx5x parts
2022-07-31 23:38:27 -04:00
Ha Thach
bd2a9cdbe7
change the SDA, SCL timer from alt to primary to avoid pwm conflict (#331) 2022-06-05 16:49:30 -04:00
caternuson
b13ae7f0b7 add PIN_DOTSTAR_CLOCK 2022-03-23 11:43:51 -07:00
Ha Thach
137b8d2de0
fix typo board defines for feather m0 express (#325) 2022-03-08 14:24:19 -05:00
Ha Thach
85f71fb7c1
Merge pull request #324 from adafruit/release-1.7.10
increase verion to 1.7.10
2022-02-17 17:07:05 +07:00
hathach
ada1b9d9d3 increase verion to 1.7.10
bump up included tinyusb to 1.9.4
2022-02-17 16:54:43 +07:00
Ha Thach
81f9ee0889
Merge pull request #323 from adafruit/revert-bossac-to-1.8
revert bossac tool from 1.9 back to 1.8
2022-02-06 00:39:01 +07:00
hathach
327fbceb48 revert bossac tool from 1.9 back to 1.8
move blm badge up in boards.txt, update id for portal m4
2022-02-04 12:12:52 +07:00
Kattni
d4ed1fd456
Merge pull request #321 from caternuson/iss320_dotstar
Add defines for internal DotStar pins
2022-01-26 18:50:42 -05:00
caternuson
dd787f583c paran u 2022-01-26 15:23:50 -08:00
caternuson
6398c2a1ac add dotstar pin defs 2022-01-26 15:19:30 -08:00
Ha Thach
2a7aae79ee
Update makeboards.py 2022-01-27 01:15:58 +07:00
Ha Thach
d8893ff12f
Merge pull request #319 from adafruit/bossac-1.9
migrate all boards upload tool from bossac 1.8 to 1.9 and auto-generate boards.txt
2022-01-27 01:15:03 +07:00
hathach
5528bf224f add makeboard.py to genearte boards.txt to prevent error in board addition 2022-01-26 17:25:48 +07:00
hathach
6bc12c92fe
migrate all boards from bossac 1.8 to 1.9 2022-01-25 22:03:49 +07:00
Ha Thach
67dfb93a4a
migrate all m0 upload tool to bossac 1.8 (#318) 2022-01-14 16:59:59 -05:00
Ha Thach
c999601efc
increase version to 1.7.7 for release 2022-01-13 11:42:21 +07:00
Ha Thach
3f214fea3b
Merge pull request #317 from adafruit/more-bossac18
update bossac18 for neokey, neo, rotary, slide trinkey m0
2022-01-13 11:27:05 +07:00
hathach
53248609ec
update bossac18 for neokey, neo, rotary, slide trinkey m0
also add fake SPI interfaces for them as well
2022-01-13 11:04:19 +07:00
Ha Thach
525980e0ee
Prepare BSP for Internal Flash filesystem (#316)
* update upload tool for adafruit_proxlighttrinkey_m0 to bossac18

* fake SPI Interface so we could compile with SdFat
2022-01-12 13:34:27 -05:00
hathach
90b4d35236
increase version 1.7.6 for release 2022-01-10 22:46:08 +07:00
Ha Thach
9785217e25
Merge pull request #315 from adafruit/add-Werror=return-type
add -Werror=return-type for all warning options
2022-01-07 02:19:25 +07:00
hathach
bac2839448 add -Werror=return-type for all warning options 2022-01-06 18:20:59 +07:00
ladyada
a8c4b4d8e3 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2022-01-04 13:50:18 -05:00
ladyada
3db7484736 'hot fix' for https://github.com/arduino-libraries/WiFiNINA/issues/184 2022-01-04 13:50:14 -05:00
Ha Thach
e669a01bc1
Merge pull request #314 from prampec/patch-1
Introduce digital pin definitions
2021-12-21 12:24:25 +07:00
Balázs Kelemen
e715d707ef
Introduce digital pin definitions
Pin definitions are based on the schematics.
2021-12-20 23:20:19 +01:00
Ha Thach
1710c41552
enable DRVSTR for output pin (#313)
add neopixel and button pin define for circuitplay
2021-12-13 22:58:26 -05:00
Ha Thach
41c0a72f37
Merge pull request #310 from MartinL1/master
Add int64_t and uint64_t data types to Serial.print(ln)
2021-10-01 15:21:57 +07:00
hathach
6f5a596b31
indentation 2021-10-01 14:58:17 +07:00
MartinL1
3b2df62575
Update Print.cpp 2021-09-30 12:27:12 +01:00
MartinL1
6907751dd1
Update Print.h 2021-09-30 12:25:26 +01:00
Ha Thach
8b70e4c252
Merge pull request #309 from zuyan9/master
Bugfix - waiting for first ADC read to complete after ADC enable.
2021-09-17 17:38:54 +07:00
Zuyang
6ddfddf877
Bugfix - waiting for first ADC read to complete after ADC enable. 2021-09-15 19:14:42 -04:00
Ha Thach
bafcb36c19
bump up version for release 1.7.5 2021-09-01 12:27:38 +07:00
Ha Thach
11b223acef
Merge pull request #308 from adafruit/more-m4-can-typo
fix m4 can typo
2021-08-31 22:28:27 +07:00
hathach
e24e4af26b
fix m4 can typo 2021-08-31 22:15:41 +07:00
Ha Thach
1b17683575
increase version for 1.7.4 release 2021-08-17 11:38:02 +07:00
Ha Thach
46e2271984
fix m4 can pin typo (#307)
also bump up tinyusb lib
2021-08-16 11:56:21 -04:00
Ha Thach
de975d929c
Merge pull request #306 from 2bndy5/global-define-for-any-adafruit-boards
add -DADAFRUIT_ARCH_SAMD to all board's build.extra_flags
2021-07-16 00:19:08 +07:00
Brendan
42d3ad1e0b requested changes 2021-07-15 00:20:52 -07:00
Brendan
a02b851395 add -DADAFRUIT_ARCH_SAMD to all board's build.extra_flags 2021-07-14 18:45:39 -07:00
hathach
f5564f85f1 bump TinyUSB to 1.3.0 2021-06-29 11:55:50 +07:00
hathach
2163aa82fe
bump tinyusb 2021-06-26 01:38:30 +07:00
Ha Thach
203746757a
Update tinyusb library to compatible with 1.2.0 (#303)
* more Adafruit_TinyUSB include

* add metro m0 m4 with tinyusb to ci

* correct fqbn

* support ci with tinyusb variant

bump zeroDMA and fix warnings with USBHost library example

* install missing libraries

* more libraries

* update tinyusb library to 1.2.0

increase version to 1.7.3
2021-06-25 10:08:33 -04:00
Ha Thach
4e51791226
Merge pull request #301 from adafruit/more-ci-work
More ci work
2021-05-26 13:13:26 +07:00
hathach
aff98b3875
increase version 1.7.2 for release 2021-05-26 12:54:37 +07:00
hathach
3c601b613e
bump builtin TinyUSB to 1.0.3 2021-05-26 10:05:12 +07:00
hathach
481e4920dd
always build with all warnings, but not fatal error 2021-05-25 22:37:20 +07:00
hathach
8c2dd0b682
bump zeroDMA 2021-05-25 22:01:22 +07:00
hathach
9c2bdbc314
include TinyUSB header for builtin libraries if selected 2021-05-25 18:30:09 +07:00
hathach
69a2211b81
add Adafruit_ZeroDMA as submodules 2021-05-25 18:04:21 +07:00
hathach
14a6b40ed9
remove local copy of Adafruit_ZeroDMA 2021-05-25 18:03:58 +07:00
Ha Thach
cca8448cfe
Merge pull request #300 from adafruit/fix-warnings
Fix warnings
2021-05-24 23:41:00 +07:00
hathach
33a1e15fb0 increase version to 1.7.1 2021-05-24 23:33:50 +07:00
hathach
e49dab6406 also bump tinyusb 2021-05-24 23:33:24 +07:00
hathach
51bd7a7967 better fix warning with "-Wclass-memaccess" in SPI 2021-05-24 21:31:52 +07:00
hathach
a7a8b02854 use CMSIS-Atmel-1.2.2 to fix LITTLE_ENDIAN warning 2021-05-24 20:44:16 +07:00
Ha Thach
fa24f50fb4
increase version to 1.7.0 for release 2021-05-19 13:24:46 +07:00
Ha Thach
7585cb7b76
Merge pull request #298 from adafruit/rework-tinyusb
Rework tinyusb lib
2021-05-19 13:23:48 +07:00
lady ada
32b62c86ff add AREF pin as A12 2021-05-18 11:13:01 -04:00
hathach
461f855940 ci skip tinyusb lib examples for now 2021-05-18 21:24:48 +07:00
hathach
a7bab5b591 update tinyusb lib to 1.0.0 2021-05-18 17:35:49 +07:00
ladyada
93b1ba1e4a A11 isnt an analog in! 2021-05-14 16:34:46 -04:00
lady ada
322f2ff8c9 add definition for touchpad 2021-05-13 10:12:18 -04:00
hathach
a9d41b6019 fix typo in tinyusb lib 2021-05-10 19:11:44 +07:00
hathach
c262dc2ff9 clean up and add note for "-Wclass-memaccess" 2021-05-10 19:06:44 +07:00
Ha Thach
48956ddef8
increase version for release 1.6.8 2021-05-10 18:23:18 +07:00
hathach
7234390bc1
sync tinyusb lib 2021-05-10 17:16:42 +07:00
hathach
3c173d5d19
update with TinyUSB_Device_FlushCDC() 2021-05-10 12:52:55 +07:00
hathach
30d0738262 sync with tinyusb lib latest change 2021-05-10 12:22:18 +07:00
Limor "Ladyada" Fried
c26a8371f9
Trinkeys (#296)
* add rotary trinkey rev B

* add slide trinkey

* proximity sensing trinkey

* update variant to shipping

* forgot one!

* fix two typos

* fix up slide trinkey for rev B
2021-05-08 16:28:31 -04:00
hathach
704450cc1c
add libraries/Adafruit_TinyUSB_Arduino as submodule
include Adafruit_USBD_CDC.h from submodule
2021-05-08 01:08:31 +07:00
hathach
15fd604313 clean up 2021-05-07 17:30:00 +07:00
hathach
88520ba975 update tinyusb header 2021-05-07 14:49:02 +07:00
hathach
1f029ece68 fix typo 2021-05-07 00:30:15 +07:00
hathach
6fd7609c6e add feather m4 can to ci 2021-05-07 00:15:08 +07:00
hathach
d3091df758
change porting API 2021-05-06 21:47:26 +07:00
hathach
fc358eaf65
remove tinyusb core submodule, move tinyusb src to its own library to reduce dependency 2021-05-06 16:03:34 +07:00
Henry Gabryjelski
439c6b51c9
Narrowly silence new (GCC 8.1+) warning (#290)
Fixes #287

The warnings look like:
```
      Line 338 Char 37
      warning: 'void* memcpy(void*, const void*, size_t)' 
               writing to an object of type 'struct DmacDescriptor'
               with no trivial copy-assignment [-Wclass-memaccess]
```
2021-04-30 11:42:15 -04:00
Ha Thach
ade7cafbae
Merge pull request #289 from henrygab/patch-2
Fix [-Wrestrict] bug
2021-04-13 12:46:32 +07:00
hathach
ea208a42b2
use correct CMSIS-Atmel-1.2.1.path 2021-04-09 14:07:30 +07:00
Ha Thach
dffa5b8acd
Merge pull request #291 from adafruit/use-same51-from-cmsis-atmel-tool
Use same51 from cmsis atmel tool
2021-04-09 13:52:16 +07:00
hathach
c47727252c
increase version to 1.6.7 2021-04-09 13:50:15 +07:00
hathach
1870cefd75
use same51 header from cmsis-atmel package 2021-04-09 13:33:17 +07:00
Henry Gabryjelski
a7a9d2dbc1
Fix loop iterations 2021-04-08 17:51:06 -07:00
Ha Thach
e3407013a8
Merge pull request #288 from henrygab/patch-1
Cast to integral type ignores qualifier `volatile`
2021-03-30 01:01:41 +07:00
Henry Gabryjelski
76f999b825
Fix [-Wrestrict] bug
Untested...
2021-03-25 15:09:54 -07:00
Henry Gabryjelski
d542a60ae6
Cast to integral type ignores qualifier volatile
Attempting to cast to a `volatile uint32_t` does nothing different from cast to a `uint32_t`,
with the exception of **_looking like_** it's accessing a register.
2021-03-25 14:52:25 -07:00
Ha Thach
243c208b22
bump version for 1.6.6 release 2021-03-15 23:40:24 +07:00
Ha Thach
9e15226813
Merge pull request #286 from adafruit/neotrinkey
add new variant
2021-03-15 23:22:22 +07:00
lady ada
af4f2cb75c typo fixes! 2021-03-15 12:13:48 -04:00
lady ada
3adf881254 add new variant 2021-03-14 17:22:49 -04:00
Phillip Pearson
aebf3cb686
Port some AVR Serial_ (SerialUSB) API's over (#285)
Co-authored-by: Sandeep Mistry <s.mistry@arduino.cc>
2021-03-06 11:56:47 -05:00
Ha Thach
e16a55ba0b
Merge pull request #281 from matt-chan/patch-1
Fix EINT listing for pin 4
2021-01-26 11:31:46 +07:00
lady ada
8dcab42ce3 bump to add fixes for CAN Feather and BLM Badge 2021-01-25 20:07:13 -05:00
lady ada
7716ebbcd6 update BLM badge for uart (used in testing) 2021-01-25 14:40:44 -05:00
Matthew Chan
8c6f2dd466
Fix remaining EINT values
Add additional EINT fixes for PA{0,1,30}, PB{3, 23}.
2021-01-25 13:12:49 -05:00
Matthew Chan
aa706d706d
Fix EINT listing for pin 4
I think this file doesn't match the circuit diagram listing at https://cdn-learn.adafruit.com/assets/assets/000/047/156/original/circuit_playground_Adafruit_Circuit_Playground_Express_Pinout.png?1507829017.

It causes the interrupt pin checking code in ArduinoLowPower to fail, meaning it won't listen to interrupts from button A. Button B works fine.
2021-01-25 03:07:12 -05:00
lady ada
812399fe45 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2021-01-10 17:26:12 -05:00
lady ada
9ddc306013 CAN variant updates, fix for PDM on badge 2021-01-10 17:26:07 -05:00
Paint Your Dragon
12e0a79fea
Merge pull request #279 from RudolphRiedel/master
Added a isBusy() method to SPI calls to allow non-blocking polling of…
2020-12-28 11:46:52 -08:00
Rudolph Riedel
3c7a2d5bad Added a isBusy() method to SPI calls to allow non-blocking polling of the DMA transfer status. 2020-12-28 13:51:55 +01:00
Richard Campbell
146e8b8e53 Fix typo in samd51 clock init 2020-12-27 00:52:53 -08:00
Valerii Koval
dcc531f963
Typo fix in PID for BLM Badge (#274) 2020-12-10 14:38:38 -05:00
Limor "Ladyada" Fried
f2a72d1c1e
Fix addpath (#275)
* try it!
2020-12-10 14:25:11 -05:00
lady ada
ec69488b42 add boost enable pin for CAN feather 2020-12-01 20:12:05 -05:00
Ha Thach
1fa45ad6a6
update version to 1.6.4 for release 2020-11-05 22:43:46 +07:00
Limor "Ladyada" Fried
0b160161de
Merge pull request #270 from mdonoughe/matrixportal-led
update LED_BUILTIN for matrixportal_m4
2020-10-31 17:20:42 -04:00
Matthew Donoughe
b8235856be update LED_BUILTIN for matrixportal_m4 2020-10-31 16:16:44 -04:00
Limor "Ladyada" Fried
d0396b05ce
Merge pull request #269 from adafruit/m0-optimization-option
added optimization menu option for M0
2020-10-31 11:46:57 -04:00
hathach
54beccb9b4 added optimization menu option for M0 2020-10-31 14:39:22 +07:00
Limor "Ladyada" Fried
b94b432dad
Merge pull request #267 from jepler/feather-can-bsp
Adafruit Feather M4 CAN: Add support for board
2020-10-20 15:23:57 -04:00
da80034588 Add CAN handlers for SAM E51 2020-10-20 08:55:53 -05:00
3471cdffa4 update feather can board property 2020-10-08 21:04:11 -05:00
f077606591 correct board name string 2020-10-07 14:03:21 -05:00
3ab4dfe9de feather_can_m4: define PIN_CAN_abc macros 2020-10-07 13:29:44 -05:00
308e949881 feather_m4_can: Add CAN-related pins to variant files
40: CAN_STANDBY
41: CAN_TX
42: CAN_RX
2020-10-07 12:50:07 -05:00
ad022b412a Add special linker script stanza for CAN message RAM 2020-10-06 11:48:55 -05:00
7ae96b4323 Adapt feather_m4 variant files to can 2020-10-06 11:42:24 -05:00
1ffdc7d0f0 Files from Atmel.SAME51_DFP.1.1.139.atpack 2020-10-06 11:42:08 -05:00
0c8e1ede52 boards.txt: add Feather CAN 2020-10-06 10:47:41 -05:00
lady ada
4c6d754c50 fix https://github.com/adafruit/ArduinoCore-samd/issues/266 2020-10-01 16:18:06 -04:00
lady ada
fa095b35c0 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2020-09-28 20:23:35 -04:00
Ha Thach
9d4bdb8a01
increase for 1.6.3 release 2020-09-23 10:27:54 +07:00
Limor "Ladyada" Fried
9c667a4409
Merge pull request #265 from adafruit/fix-warning
fix matrixportal_m4 warning define
2020-09-22 23:26:08 -04:00
Ha Thach
e99eb502ae
Merge pull request #264 from adafruit/qtpy
QT Py!
2020-09-23 10:23:39 +07:00
hathach
a2151f384e fix matrixportal_m4 warning define 2020-09-23 10:15:49 +07:00
lady ada
0d46fb5839 fix name of chip 2020-09-22 23:07:48 -04:00
lady ada
4a5f9f7aae add custom init code for neopixel power pin to default on 2020-09-22 22:48:50 -04:00
lady ada
bdd8ee911b rev C complete! 2020-09-22 22:41:26 -04:00
lady ada
a029d61925 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2020-09-19 17:22:08 -04:00
lady ada
fad2d91143 increase serial buffer (helps with bno08x uart!) 2020-09-19 17:22:03 -04:00
Ha Thach
6a59e8347d
Merge pull request #262 from adafruit/update-tinyusb
update tinyusb core
2020-09-15 23:50:03 +07:00
Limor "Ladyada" Fried
e6c07cc7d0
Merge pull request #263 from ulysse314/adafruit-master
Avoiding unused parameter warning for dmaDoNothingCallback()
2020-09-15 10:51:59 -04:00
moussaillon
814a352588 Avoiding unused parameter warning for dmaDoNothingCallback() 2020-09-15 16:32:21 +02:00
hathach
4888cdc958 update tinyusb core to commit e7b892095f2bb5d8bef6a748238369bdd268ed5e 2020-09-15 20:59:46 +07:00
hathach
a0d7cfdebc update tinyusb core to commit 0328bd4c134d05b4bb0472e0db918153f4dd15dd
also set string descriptor for Serial CDC
2020-09-15 19:41:28 +07:00
lady ada
bdf5ac8117 fix some pin numbers so that there's an LED on pin 13
add external SPI
2020-09-13 17:08:19 -04:00
lady ada
28cbc716e4 test external SPI flash + I2S 2020-09-13 00:15:00 -04:00
lady ada
028ca90052 rev A variant 2020-09-12 17:21:18 -04:00
Ha Thach
9ba4e98237
Increase version for release 1.6.2 2020-09-08 10:34:51 +07:00
Limor "Ladyada" Fried
8d3b49bf39
Merge pull request #259 from adafruit/matrixportal
Matrix portal draft
2020-09-03 23:30:44 -04:00
lady ada
c044ba3929 add bootloader 2020-08-31 11:57:49 -04:00
lady ada
9827155244 oof bad merge 2020-08-30 15:36:21 -04:00
lady ada
287d079c4d Merge remote-tracking branch 'origin/master' into matrixportal 2020-08-30 14:03:12 -04:00
Limor "Ladyada" Fried
d1c52f223b
Merge pull request #258 from adafruit/blmbadge
add blm badge
2020-08-30 13:44:48 -04:00
lady ada
1ba7379107 add blm badge 2020-08-30 13:25:44 -04:00
lady ada
66097a89e7 add fake LED 2020-08-30 13:19:38 -04:00
lady ada
731adc71be add variant 2020-08-29 02:39:04 -04:00
lady ada
1264ec61d7 Merge branch 'master' into matrixportal 2020-08-29 00:49:38 -04:00
Ha Thach
83b63b1e83
Merge pull request #257 from adafruit/fix-tone
Fix tone on SAMD51
2020-08-29 00:20:13 +07:00
hathach
aa5fa81bb7 use TC1 for servo, TC0 for tone for samd51
- make Tone_Handler() a strong symbol
2020-08-28 14:41:48 +07:00
Phillip Burgess
1e92424a50 Obscure SPI DMA bug fixed. Also, big non-blocking transfers supported. 2020-08-20 20:22:39 -07:00
Ha Thach
37a6ab97fa
Merge pull request #196 from ulysse314/unusedvariable
Removing _dacResolution for __SAMD51__ is not defined (variable not used)
2020-08-20 13:23:37 +07:00
Ha Thach
94e908c453
Merge branch 'master' into unusedvariable 2020-08-20 10:57:40 +07:00
Phillip Burgess
420b9a8429 Small SPI lib fix, add SWO pin to variant header 2020-08-19 11:36:20 -07:00
Ha Thach
fd40287bcb
Merge pull request #207 from henrygab/fix_compile_warnings3
Improve build script & fix more warnings
2020-08-10 14:12:13 +07:00
Henry Gabryjelski
66b0a74073 Use FIXME instead of BUGBUG 2020-08-09 23:50:13 -07:00
Henry Gabryjelski
55a9930808 reduce affected area of diagnostic push/pop 2020-08-07 11:28:53 -07:00
Henry Gabryjelski
134ebe7e18 typo - missing semicolon 2020-08-06 16:11:10 -07:00
Henry Gabryjelski
528a25e0ab @hathach is uncomfortable with attributes on function parameters 2020-08-05 21:27:36 -07:00
Henry Gabryjelski
adc0866b7d Hathach doesn't like attributes on parameters 2020-08-05 01:54:03 -07:00
Henry Gabryjelski
eb3c11472c Revert "TEST: Is LITTLE_ENDIAN already properly defined?"
This reverts commit 5cbfd74f4d.
2020-08-04 21:08:58 -07:00
Henry Gabryjelski
77321a6827 Merge branch 'fix_compile_warnings3' of https://github.com/henrygab/ArduinoCore-samd into fix_compile_warnings3 2020-08-03 20:43:25 -07:00
Henry Gabryjelski
a2801a1602 fix tab/space mixtures -- whitespace only change 2020-08-03 20:43:13 -07:00
Henry Gabryjelski
25a57896c0
Merge branch 'master' into fix_compile_warnings3 2020-08-03 17:09:31 -07:00
Henry Gabryjelski
00dd2e0097 Per @hathach request 2020-08-03 17:06:51 -07:00
Limor "Ladyada" Fried
ea9f1a5d28
Merge pull request #243 from nekuneko/patch-1
Enable Interrupt #8 on Pin PORTA28 (GPIO2)
2020-07-27 10:38:03 -04:00
Neku
b1572ceb25
Enable Interrupt #8 on Pin PORTA28 (GPIO2)
In order to use IRLibRecvPCI class from IRLib2 with Adafruit pIRKey, it's necessary to allow interrupts on this pin.
2020-07-27 02:21:31 +02:00
lady ada
0947169772 add blm badge 2020-07-25 17:21:05 -04:00
Ha Thach
d9e9508be4
Merge pull request #242 from adafruit/fix-extint-m4
Fix extint m4
2020-07-25 00:14:20 +07:00
hathach
76f0206f01 fix all other incorrect EXTINT 2020-07-24 23:05:48 +07:00
hathach
860bc6c6b9 fix EXTINT for PA4 and PA6
follow up to #239
2020-07-24 19:05:16 +07:00
Ha Thach
3f0f35fbc5
Merge pull request #239 from NanoCodeBug/patch-1
Fix external pin interrupt definitions for Feather M4
2020-07-24 17:00:43 +07:00
Ha Thach
4141fce796
Merge pull request #241 from adafruit/sync-tinyusb-238a5c0b95fcd402d24524c7bebbdd822168a51e
Sync with Adafruit_TinyUSB_ArduinoCore
2020-07-24 02:01:06 +07:00
hathach
2555c2d68a
sync with Adafruit_TinyUSB_ArduinoCore commit 238a5c0b95fcd402d24524c7bebbdd822168a51e 2020-07-23 07:02:41 +07:00
NanoCodeBug
57db4d7132
Fix external pin interrupt definitions for Feather M4
Spent a while trying to figure out why analog pins A4/18 and A5/19 where not working as interrupts, turns out the external interrupt definitions are wrong in-code. These fixed definitions now match the published pinout diagram for the feather m4 and the samd51 datasheet.
2020-07-21 22:07:38 -07:00
Ha Thach
50f9be1544
increase 1.6.1 for release 2020-07-21 18:37:20 +07:00
Limor "Ladyada" Fried
4b669eadb0
Merge pull request #235 from hathach/fix-ci-build
move test_cmsis_fast_rfft example to its own folder to fix ci build
2020-07-13 08:21:17 -04:00
hathach
2569103e1a move test_cmsis_fast_rfft example to its own folder to fix ci build 2020-07-13 18:26:29 +07:00
Ha Thach
196a29fc90
Merge pull request #232 from hathach/update-toolchain-cmsis
Update toolchain cmsis, fix build with tensorflow
2020-07-07 11:06:21 +07:00
Ha Thach
53c92d46e9
Increase version to 1.6.0 per review 2020-07-07 09:37:15 +07:00
hathach
290f3d6308
update cmsis from 4.5.0 to 5.4.0 2020-07-06 16:22:30 +07:00
hathach
246c75a1ae
bump up version for 1.5.15 2020-07-05 22:57:40 +07:00
hathach
00a863c100
update tinyusb to 0749077 2020-07-05 22:57:02 +07:00
hathach
ff82b735f2
remove gcc 7-2017q4 specific 2020-07-05 22:40:37 +07:00
lady ada
fdddb19a3c add BLE uart test support 2020-06-23 14:57:52 -04:00
Limor "Ladyada" Fried
bdf0c84109
Merge pull request #227 from OPEnSLab-OSU/master
Fix I2C SERCOM Hang (from Arduino SAMD core)
2020-05-28 22:06:27 -04:00
Noah Laptop
dad77cd8cc add SERCOM patch from arduino SAMD core 2020-05-28 17:20:30 -07:00
Ha Thach
52d793ed8e
release 1.5.14
fix samd21 USB IRQ typo,
2020-05-04 22:11:14 +07:00
Ha Thach
e607c3ddbe
Merge pull request #226 from hathach/fix-samd21-usb
fix incorrect USB IRQ typo for samd
2020-05-04 22:09:56 +07:00
hathach
6d6e5b1ee9 fix incorrect USB IRQ typo for samd 2020-05-04 22:00:22 +07:00
Ha Thach
d60ec0fae3
Merge pull request #224 from hathach/release-.1.5.13
Update TinyUSB to commit c59fa77 due to a bug in the stack
2020-04-24 00:09:34 +07:00
hathach
159ae8e550 Update TinyUSB to commit c59fa77 due to a bug in the stack
increase version 1.5.13
2020-04-23 23:44:46 +07:00
Ha Thach
d56901d13b
increase version to release 1.5.12 2020-04-22 11:41:28 +07:00
Ha Thach
a45b5c56f6
Merge pull request #221 from hathach/update-tinyusb
update tinyusb core and samd port
2020-04-22 11:30:28 +07:00
Ha Thach
6c2a982c35
Merge pull request #222 from versioduo/midi-buffer-size
tinyusb: MIDI - Increase buffer size
2020-04-22 11:08:16 +07:00
Kay Sievers
aa9792167d tinyusb: MIDI - Increase buffer size
We only transfer new packets when 64 bytes are available in the FIFO
buffer. This increase the buffer, so we can receive the next new packet
while still processing the current one.
2020-04-21 20:28:02 +02:00
hathach
72ebc1a809 sync with tinyusb commit 1d33aa9
fix issue with MIDI sysex driver
2020-04-22 00:20:50 +07:00
hathach
f564235648 update tinyusb core and samd port 2020-04-21 12:05:51 +07:00
Limor "Ladyada" Fried
bf24e95f7e
Merge pull request #217 from d-a-v/wless
less warnings on featherM0
2020-03-05 15:09:32 -05:00
David Gauchard
1112d77c3d less warnings on featherM0 2020-03-05 18:25:12 +01:00
Ha Thach
aa21fb1e13
increase version 1.5.11 for release 2020-02-27 00:09:20 +07:00
Limor "Ladyada" Fried
18e455f2df
Merge pull request #214 from hathach/fix-CI_Tests-warning
add fake CI_Tests.h header to make Arduino happy
2020-02-10 22:18:40 -05:00
hathach
bfba9812b7 add fake CI_Tests.h header to make Arduino happy 2020-02-11 10:10:12 +07:00
Limor "Ladyada" Fried
5b24029000
Merge pull request #211 from GMagician/Fix-AGCM4-total-pins
[AGCM4] Update total pins
2020-02-08 19:21:30 -05:00
GMagician
a5271b3d1c Update total pins
pin 95 is onboard SD detect. Real total pins is then 96 not 95
2020-02-08 23:42:15 +01:00
Ha Thach
b13e6c68b5
Update platform.txt
Increase version for release 1.5.10
2020-02-03 14:23:30 +07:00
Ha Thach
f55ecadb78
Merge pull request #210 from adafruit/flashdefines
Flashdefines
2020-02-03 10:26:14 +07:00
Lady Ada
b09a92698a & circuitplay too! 2020-02-01 22:00:17 -05:00
Lady Ada
6be91634fd add flash definitions 2020-02-01 21:59:12 -05:00
Henry Gabryjelski
12c4506437 Improve variant compliance
Starting in SAMD CORE 1.6.6, `digitalPinToInterrupt`
was moved to Arduino.h, variant.h must no longer define it.
2020-01-17 01:16:20 -08:00
Henry Gabryjelski
c68c0b19ae Disable -Wimplicit-fallthrough in sections
These two files contain code with switch statements,
where one case "fall through" to the next case.
As it's not currently clear if this is intentional or not,
rather than modifying the code in any way (regression risk),
use GCC diagnostic pragmas to disable this warning for
only these two files, with BUGBUG marking to encourage
review by someone more familiar with this code.
2020-01-17 01:16:20 -08:00
Henry Gabryjelski
5cbfd74f4d TEST: Is LITTLE_ENDIAN already properly defined? 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
1a89b145ef Enhance warning output.
Add comment to line GCC points finger at.
This is not intended to fix the warning.
Rather, it is intended to make it clearer
that this may need a deeper review before
determining what (if any) code change would
be appropriate.
2020-01-17 01:16:20 -08:00
Henry Gabryjelski
e1e7b37ff3 Disable -Wimplicit-fallthrough for these two files.
These two files contain code with multiple switch statements,
where one case "fall through" to the next case.
As it's not currently clear if this is intentional or not,
rather than modifying the code in any way (regression risk),
use GCC diagnostic pragmas to disable this warning for
only these two files, with BUGBUG marking to encourage
review by someone more familiar with this code.
2020-01-17 01:16:20 -08:00
Henry Gabryjelski
4276526c67 Avoid compiler warning for unused parameter 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
a2dd8614d4 Avoid signed/unsigned comparison warning. 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
3253d46f45 Avoid unused parameter compiler warnings 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
d5935a8c51 remove 'unused parameter' compiler warning 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
4f80972c23 cast to uint32_t to avoid compiler warning
that said, it's possible this api might return
a variety of non-zero codes.  code could benefit
from being updated (e.g., documenting return codes)
2020-01-17 01:16:20 -08:00
Henry Gabryjelski
9ab68e1aff avoid warnings on unused parameter 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
155cbc5262 Friendlier name for -Wall build 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
622d9f6183 re-enable builds with all warnings 2020-01-17 01:16:20 -08:00
Henry Gabryjelski
cb97944642 Can we mark jobs as allowed to fail? 2020-01-17 01:16:20 -08:00
Limor "Ladyada" Fried
bee96c4a80
Merge pull request #206 from henrygab/fix_compile_warnings
Fix compile warnings
2020-01-16 21:16:54 -05:00
Henry Gabryjelski
8afd0523b1 Fix unintended fall-through
The compiler found this, not me.  Building with
all warnings enabled is recommended.
2020-01-16 16:15:34 -08:00
Henry Gabryjelski
52c988fea0 Mark unused parameters as such. 2020-01-16 16:14:30 -08:00
Henry Gabryjelski
70d3c1dbfe Fix warnings about redefinition of LITTLE_ENDIAN
For safety, this fix also validates that, if
`LITTLE_ENDIAN` was already defined, that it
was defined to have the same value that the
code sets this to.
2020-01-16 16:11:40 -08:00
Limor "Ladyada" Fried
330cb4e652
Merge pull request #202 from rlcamp/master
Force linker to use newer Arduino-provided versions of libarm_cortexM4lf_math.a
2020-01-07 00:01:56 -05:00
rlcamp
34013bfd63
Update boards.txt
Added extra space to force rerun of CI
2020-01-06 20:47:02 -08:00
Lady Ada
1df7e524ed add math linker test! 2020-01-06 23:34:20 -05:00
rlcamp
460b1c2249 Force linker to use newer Arduino-provided versions of libarm_cortexM4lf_math.a 2020-01-06 19:52:07 -08:00
Lady Ada
4cc3251b02 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2020-01-06 22:35:55 -05:00
Lady Ada
ed2dded753 fix https://github.com/adafruit/ArduinoCore-samd/issues/187 2020-01-06 22:35:49 -05:00
Limor "Ladyada" Fried
c14e07828f
Merge pull request #200 from hathach/action-ci
Add action ci to build examples in libraries folder that comes with BSP
2020-01-02 14:05:29 -05:00
hathach
f2a21265b3 add action badge to readme 2020-01-02 17:24:17 +07:00
hathach
2cc7f72400 drop monster_m4sk 2020-01-02 17:17:30 +07:00
hathach
bab8b92f60 add skip file 2020-01-02 17:08:26 +07:00
hathach
c53c44331e build most of adafruit samd boards 2020-01-02 17:03:44 +07:00
hathach
9d9b509084 add metro_m4 test 2020-01-02 13:07:55 +07:00
hathach
1595e2f59b update lib deps 2020-01-02 12:53:46 +07:00
hathach
90c0b48235 add build all script 2020-01-02 12:47:54 +07:00
hathach
411cfa6d9a test metro_m0 build 2020-01-02 12:45:43 +07:00
Ha Thach
137c0bdf9f
increase version to 1.5.9 for release 2019-12-31 11:52:56 +07:00
Ha Thach
18b64d471f
Merge pull request #199 from hathach/develop
revert 6630fe7 availableForWrite() return int
2019-12-31 11:52:08 +07:00
hathach
fc737be24e revert 6630fe7cc0 availableForWrite() return int 2019-12-31 11:44:26 +07:00
Ha Thach
32e5394aea
Increase version for release 2019-12-30 15:55:52 +07:00
moussaillon
99f1fa3de8 Removing _dacResolution for no-__SAMD51__ (variable not used) 2019-12-29 02:29:16 +01:00
Ha Thach
2bf2a37784
Merge pull request #194 from hathach/develop
improve tinyusb samd driver
2019-12-27 11:17:42 +07:00
hathach
2ca9dfd40e
update tinyusb core 2019-12-27 11:15:59 +07:00
hathach
8e3c4bcaac
improve tinyusb samd driver 2019-12-26 23:00:37 +07:00
Ha Thach
1dcf3c53ed
Merge pull request #193 from hathach/develop
tinyusb core: improve setup handling
2019-12-25 23:19:02 +07:00
hathach
2179f63a97 tinyusb core: improve setup handling 2019-12-25 10:50:37 +07:00
Ha Thach
b1a79758ee
Merge pull request #192 from hathach/develop
update tinyusb
2019-12-24 22:22:14 +07:00
hathach
861fec5dbd update tinyusb core 2019-12-24 21:43:26 +07:00
hathach
31fc54d037 added option to debug tinyusb with Serial1 2019-12-24 16:03:23 +07:00
Limor "Ladyada" Fried
1941e1717a
Merge pull request #190 from hathach/develop
refactor tinyusb core
2019-12-20 12:30:38 -05:00
hathach
f996c946f3
clean up 2019-12-20 13:15:01 +07:00
hathach
21b3e13b70
update tinyusb core 2019-12-20 13:11:04 +07:00
hathach
bffd3048d7
clean up 2019-12-20 00:13:24 +07:00
hathach
dd19013a79
rename Adafruit_TinyUSB_Core.cpp to Adafruit_TinyUSB_SAMD.cpp 2019-12-20 00:11:19 +07:00
hathach
4f8ccb165c
move yield() to main.cpp 2019-12-19 23:54:15 +07:00
hathach
b92b61b36f
refactor load_serial_number() to Adafruit_USBD_Device::getSerialDescriptor() 2019-12-19 23:42:27 +07:00
hathach
a346cf760f
implement detach/attach 2019-12-19 23:12:25 +07:00
hathach
2bb0a7a759
tinyusb submodule work well 2019-12-19 14:49:53 +07:00
hathach
dfac9e8582
move tinyusb core & cdc to submodule 2019-12-19 13:25:36 +07:00
hathach
4cca5de20a Merge remote-tracking branch 'adafruit/master' 2019-12-18 22:27:22 +07:00
Lady Ada
516cec5a9b Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2019-12-10 22:41:17 -05:00
Lady Ada
6630fe7cc0 @hathach Arduino core now wants size_t returned 2019-12-10 22:41:12 -05:00
hathach
5f68c65680
Merge pull request #182 from kaysievers/tinyusb-descriptor-len
tinyusb: Correct descriptor string length calculation
2019-11-19 23:52:47 +07:00
Kay Sievers
7f3211f46d tinyusb: Correct descriptor string length calculation
This fixes strcpy_uni16() to return the correct number of characters.
It wasn't visible in the host so far, because the strings have been NUL
terminated.
2019-11-19 12:30:25 +01:00
Limor "Ladyada" Fried
361481d34d
Merge pull request #186 from adafruit/baud-fix
SAMD21: Fix freq clipping in SPI.h, allow 24 MHz SPI
2019-11-04 17:52:19 -05:00
Phillip Burgess
a2c0a5b547 SAMD21: Fix freq clipping in SPI.h, allow 24 MHz SPI
SPI clock freq previously clipped at MAX_SPI/2 (6 MHz) rather than MAX_SPI. Now works correctly.
Additionally, MAX_SPI set at 24 MHz on SAMD21. This is only slightly beyond spec and so far seems reliable with SD and SdFat tests on M0 Adalogger, eyes on HalloWing M0.
2019-11-04 14:45:51 -08:00
Lady Ada
9df0b07308 fix i2c for peripheral use thanks to https://github.com/adafruit/ArduinoCore-samd/pull/185 @JordanMajd 2019-11-02 23:26:49 -04:00
Lady Ada
6be0d1fa34 Merge branch 'JordanMajd-patch_samd51_i2c_slave' 2019-11-02 23:24:22 -04:00
Lady Ada
feb846a1ff add monster m4sk too 2019-11-02 22:44:40 -04:00
Jordan Majd
2b052e11f8 Reenable Serial1 sercom int handlers, disable Wire i2c slave int handlers 2019-10-31 18:26:16 +00:00
Jordan Majd
04a2dd8ace Preserve original formatting on base sercom handler 2019-10-31 16:32:16 +00:00
Jordan Majd
7a60a36a05 I2C slave support for Pyportal Titano M4 2019-10-31 03:51:06 +00:00
Jordan Majd
bc5fcc0d35 I2C slave support for Pyportal M4 2019-10-31 03:48:54 +00:00
Jordan Majd
8368e5f487 Update endif macro comment to reflect macro 2019-10-31 03:47:41 +00:00
Jordan Majd
684811d7ac I2C slave support for PyGamer M4 2019-10-31 03:46:38 +00:00
Jordan Majd
ccd2ef97c5 I2C slave support for PyGamer Advance M4 2019-10-31 03:44:15 +00:00
Jordan Majd
43e7bd8356 I2C slave support for Pybadge M4 2019-10-31 03:43:06 +00:00
Jordan Majd
84cef9a876 I2C slave support for Pybadge Airlift M4 2019-10-31 03:39:03 +00:00
Jordan Majd
3202e7794e I2C slave support for Metro Airlift M4 2019-10-31 03:35:27 +00:00
Jordan Majd
0897920a8c I2C slave support for Metro M4 2019-10-31 03:34:37 +00:00
Jordan Majd
74cfc245ba I2C slave support for Hallowing M4 2019-10-31 03:31:38 +00:00
Jordan Majd
efd29616db I2C slave support for Grand Central M4 2019-10-31 03:29:22 +00:00
Jordan Majd
3ed74de232 I2C slave support for Feather M4 2019-10-31 03:16:08 +00:00
Jordan Majd
4dbfc244cc I2C slave support for Trellis M4, temporarily disables UART Serial 1 2019-10-31 03:03:15 +00:00
Jordan Majd
e72343c867 Add the SAMD51s 4 i2c interrupts to ensure slave support 2019-10-31 01:11:32 +00:00
hathach
c7c17484b1 Merge remote-tracking branch 'adafruit/master' 2019-10-29 11:17:48 +07:00
ladyada
1ab7cb6cdd force using 2017 toolchain (instead of 2014) 2019-10-28 18:17:22 -04:00
ladyada
ee9df548b7 fix min/max macros
allow PDM mic on pybadge edge
change pyportal backlight timer
2019-10-27 23:53:38 -04:00
ladyada
841a1b8188 use arduino-api for min/max 2019-10-27 20:08:01 -04:00
ladyada
ceccc257e7 change backlight to tcc4 so it doesnt collide with servo 2019-10-17 01:35:53 -04:00
ladyada
6076e22f1a allow PDM mic on SPI 2019-10-16 19:24:58 -04:00
ladyada
a6e9eb3686 experiment with a bandgap analog read (not working) 2019-10-07 01:04:04 -04:00
ladyada
1efed72ada bump to add new boards, fix servo and tone 2019-10-04 18:28:54 -04:00
ladyada
1e9a669f07 change Tone on samd51 to be TC0 so we can use higher numbers for other stuff! (servo is TC1) 2019-10-04 18:26:27 -04:00
ladyada
e204bf375d add samd51-capable servo for now 2019-10-04 18:08:18 -04:00
ladyada
4bcbaa7287 fix typo from contrib 2019-10-04 18:06:23 -04:00
ladyada
ec12be530d Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2019-10-04 18:00:16 -04:00
ladyada
9a6ab51b0f remove serial1 2019-10-04 18:00:12 -04:00
hathach
bb4b17bf86 Merge remote-tracking branch 'adafruit/master' 2019-10-04 22:19:38 +07:00
hathach
2cc8b49e27
Merge pull request #179 from kaysievers/tinyusb-midi-jacks
tinyusb: MIDI - split descriptor initializer into individual sections
2019-10-04 21:59:54 +07:00
Limor "Ladyada" Fried
918379dacd
Merge pull request #180 from nekuneko/patch-1
Change references from A0 & A1 to DAC0 & DAC1
2019-09-19 22:01:42 -04:00
nekuneko
a09d821f9e
Change references from A0 & A1 to DAC0 & DAC1
New boards could have DAC0 & DAC1 on different pins. DAC0 & DAC1 pins are defined on each variant.h file, so it is not needed to reference to pins A0 & A1. With this change the code is more generic. Changes affect to analogWrite & analogRead functions.
2019-09-19 11:32:29 +02:00
Kay Sievers
e5af75a476 tinyusb: MIDI - split descriptor initializer into individual sections
This allows to compose the descriptor programmatically. The calling code
can compose a MIDI descriptor with up to 16 virtual wires/jacks at
initialization time.

Tested with the tinyusb -> MIDI -> midi_test example. This commit should
not change any behavior, future extensions of the calling MIDI device
will make use of it.
2019-09-11 12:58:36 +02:00
hathach
e5b45edf5b clean up 2019-09-10 17:21:47 +07:00
hathach
f739f3c37b
Merge pull request #177 from hathach/master
follow up to pr #172
2019-09-10 17:14:04 +07:00
hathach
7c02454fc7 added set/get LanguageDescriptor
add Descriptor to setManufacturer/setProduct
2019-09-10 17:11:40 +07:00
hathach
c4f34905db
Merge pull request #172 from kaysievers/usb-names-override
tinyusb: Allow to set the USB manufacturer/product identifiers
2019-09-10 16:49:02 +07:00
hathach
04eb7d174c
Merge pull request #173 from kaysievers/tinyusb-descriptor-size
tinyusb: Allow to replace the built-in descriptor buffer
2019-09-01 14:27:37 +07:00
Limor "Ladyada" Fried
ef4072fc23
Merge pull request #175 from nekuneko/patch-3
Added Additonal Timers
2019-08-28 14:52:07 -04:00
Limor "Ladyada" Fried
29c27b6a5a
Merge pull request #174 from nekuneko/patch-2
Enable TC6 & TC7 for __SAMD21J18A__
2019-08-28 14:51:34 -04:00
nekuneko
256bc5a70d
Added Additonal Timers
TC6_CH0, TC6_CH1, TC7_CH0, TC7_CH1 on SAMD21J
TCC0_CH6, TCC0_CH7, TCC1_CH4, TCC1_CH5, TCC1_CH6, TCC1_CH7, TC6_CH0, TC6_CH1, TC7_CH0, TC7_CH1 on SAMD51J
2019-08-28 13:36:51 +02:00
nekuneko
3591f2813f
Enable TC6 & TC7 for __SAMD21J18A__ 2019-08-28 13:26:48 +02:00
Kay Sievers
dcd4e5b4ff tinyusb: Allow to replace the built-in descriptor buffer
Huge USB configurations might need more than 256 bytes for the
config descriptor buffer. MIDI devices with 16 virtual ports
grow the descriptor to 600+ bytes.

This call replaces the built-in buffer with the supllied buffer. The
call copies the content of the old buffer to the new buffer:

  uint8_t buf[1024];
  USBDevice.setDescriptorBuffer(buf, sizeof(buf));
2019-08-27 13:04:18 +02:00
Kay Sievers
9417d790a7 tinyusb: Allow to set the USB manufacturer/product identifiers
Set the USB descriptor strings. I accepts UTF-8 strings with
codepoints up to 16 bit.

  void setup() {
    USBDevice.setManufacturer("MyManufacturer");
    USBDevice.setProduct("MyProduct");
  }
2019-08-27 12:05:44 +02:00
Limor "Ladyada" Fried
52ea598baa
Merge pull request #171 from kaysievers/platform-usb-power
platform: Add USB device MaxPower default setting
2019-08-26 12:48:48 -04:00
Kay Sievers
3a022a6812 platform: Add USB device MaxPower default setting
The MaxPower field specifies the maximum power that a device can
draw from the host, when the device is bus-powered.

Define the default value of 100mA default in the platform to
allow to override it from the board definition.

Some mobile devices will only supply 20mA. If a device is known to
draw less current, adding this to the board config will make it work:
  <boardname>.build.usb_power=20
2019-08-26 09:53:00 +02:00
hathach
e33ec1fe36
Merge pull request #167 from kaysievers/master
tinyusb: correct SAMD51 serial number extraction
2019-08-26 10:20:51 +07:00
hathach
3cad30de21
Merge pull request #170 from kaysievers/tinyusb-config-power
tinyusb: Allow configuration of power setting
2019-08-26 10:18:34 +07:00
hathach
c842d61919
Merge pull request #169 from kaysievers/tinyusb-warnings
tinyusb: Avoid compilation warnings
2019-08-26 10:17:23 +07:00
Limor "Ladyada" Fried
e214f12e28
Merge pull request #168 from kaysievers/warnings
Fix compilation warning
2019-08-24 23:00:31 -04:00
Kay Sievers
b369396d0a tinyusb: Allow configuration of power setting
In some cases the power value in the device descriptor needs to
be set to a lower value, commonly 20 mA, to not get rejected by iOS
devices.

The classic USB stack reads USB_CONFIG_POWER, this adds the same
logic to tinyusb.
2019-08-25 04:04:03 +02:00
Kay Sievers
4af46bfaaa tinyusb: Avoid compilation warnings
TinyUSB adds new warnings to the compilation process. Operations
inside of {} initializers get propagated to 'int' but get assigned
to uint8_t.

Add static casts to to uint8_t to avoid a bunch of warnings like this:
  cores/arduino/Adafruit_TinyUSB_Core/Adafruit_USBD_CDC.cpp: In member function
  'virtual uint16_t Adafruit_USBD_CDC::getDescriptor(uint8_t, uint8_t*, uint16_t)':
  cores/arduino/Adafruit_TinyUSB_Core/tinyusb/src/device/usbd.h:172:74: warning:
  narrowing conversion of '(((int)itfnum) + 1)' from 'int' to 'uint8_t
  {aka unsigned char}' inside { } [-Wnarrowing]
     5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_CALL_MANAGEMENT, 0, (_itfnum) + 1,\
2019-08-25 03:13:43 +02:00
Kay Sievers
8f1711f7cc Fix compilation warning
Add 'const' declaration to avoid:
  cores/arduino/pulse.c: In function 'pulseIn':
    cores/arduino/pulse.c:44:29: warning: initialization discards
  'const' qualifier from pointer target type [enabled by default]
     volatile uint32_t *port = &(PORT->Group[p.ulPort].IN.reg);
                             ^
2019-08-25 03:08:17 +02:00
Kay Sievers
42915717a4 tinyusb: correct SAMD51 serial number extraction
TinyUSB does not match the exported serial numbers of the classic USB
stack.

The current code serializes the 32-bit words backwards, and the byte
nibbles are also backwards serialized.

A SAMD51 is exported like:
 EFADAF3113347335020202938343E0FF

while it should read:
  13FADAFE5337433139202020FF0E3438
2019-08-25 00:39:38 +02:00
Limor "Ladyada" Fried
54be8f04e3
Merge pull request #127 from GMagician/user-area
[SAMD51] Add software calibration init on startup
2019-08-22 12:56:38 -04:00
ladyada
3999dffd81 they'll need to define Serial1 so we dont get irq conflicts with DMA on the same pins, zats ok! 2019-08-14 18:19:55 -04:00
Ladyada
0b3ddf585a fix typo 2019-08-11 19:18:07 -04:00
hathach
955e28fe56
Merge pull request #164 from GMagician/fix-tinyusb
Fix tinyusb lost written chars
2019-08-08 13:25:07 +07:00
GMagician
15aaa2459c Revert "Remove unused method"
This reverts commit bc8148ba3a.
2019-08-08 07:02:16 +02:00
Limor "Ladyada" Fried
5ff858c1d5
Merge pull request #165 from brentru/add-pyportal-titano
Add Board Definition for PyPortal Titano
2019-08-07 17:42:37 -04:00
brentru
c551c20104 add definition for pyportal titano 2019-08-07 16:48:26 -04:00
GMagician
bc8148ba3a Remove unused method 2019-08-07 20:01:41 +02:00
GMagician
49f9e2f066 Fix tinyusb lost written chars
This will fix lost chars when tx buffer is full
2019-08-07 19:59:57 +02:00
ladyada
8a97e31803 unused file 2019-08-07 13:37:32 -04:00
hathach
e80f2f1b49
Update platform.txt 2019-08-06 12:23:32 +07:00
Limor "Ladyada" Fried
6ff862e6a4
Merge pull request #158 from hathach/tinyusb-webusb
update Tinyusb to support webusb
2019-08-01 13:29:46 -04:00
hathach
96adc67184 add PIN_NEOPIXEL macro for feather/metro m0/m4 hallow_m0 2019-08-01 21:31:56 +07:00
hathach
c4aebf3bd7 tinyusb clean up 2019-08-01 13:18:11 +07:00
hathach
b88912c4cf fix availableForWrite() signature 2019-08-01 11:25:57 +07:00
hathach
732bc9e3a0 add missing files 2019-08-01 11:17:20 +07:00
hathach
6f8675815e update tinyusb stack for webusb support
- add Serial availableForWrite()
-
2019-08-01 11:03:27 +07:00
Limor "Ladyada" Fried
553d3c8f0e
Merge pull request #155 from GMagician/fix-tone
Fix tone
2019-07-29 13:20:54 -04:00
GMagician
e51b006a3f Fix tone
- match timer and timer handler
- lower interrupt priority (0 seems to big for a simple tone)
- be sure 'toneIsActive' is always set (if previous tone was using a different pin, it's not set
2019-07-29 18:46:42 +02:00
Limor "Ladyada" Fried
b22e7654fc
Merge pull request #154 from adafruit/hallowings
hallowing m4 final UART fix
2019-07-27 13:21:29 -04:00
ladyada
0c63da60f7 hallowing m4 final UART fix 2019-07-27 13:20:45 -04:00
Limor "Ladyada" Fried
7cc4586130
Merge pull request #153 from adafruit/hallowings
add hallowing and m4sk
2019-07-27 13:19:16 -04:00
Limor "Ladyada" Fried
c08f564269
Merge pull request #152 from GMagician/Fix-missin-unsigned-pin
Fix missing unsigned pin and indetation
2019-07-26 16:59:18 -04:00
GMagician
2bf7821f70 Missing pin 2019-07-26 21:56:08 +02:00
Limor "Ladyada" Fried
3cd1d9e430
Merge pull request #151 from adafruit-mike-stone/master
minor correction to comments in variants/metro_m4/variant.cpp
2019-07-26 15:50:39 -04:00
Mike Stone
e20ac5e5be minor correction to comments in variants/metro_m4/variant.cpp 2019-07-26 14:43:02 -05:00
hathach
fbc7ec4dff
Merge pull request #149 from GMagician/fix-compile-warnings
Fix compile warnings
2019-07-27 01:19:08 +07:00
Limor "Ladyada" Fried
10ebeba6b9
Merge pull request #147 from GMagician/fixes
Remove unsigned from pins
2019-07-26 14:00:48 -04:00
GMagician
f937db2251 Fix compile warnings 2019-07-26 18:44:13 +02:00
GMagician
8362ba3b96 Removing unsigned from pins 2019-07-26 18:24:04 +02:00
Limor "Ladyada" Fried
f4f87c8ba3
Merge pull request #146 from GMagician/addmissingpin
Add missing pin
2019-07-25 17:31:48 -04:00
GMagician
54910c06cf Add missing pin
- Added onboard sd detect pin
- Removed duplicated space chars
2019-07-25 22:15:04 +02:00
Limor "Ladyada" Fried
6e78986f34
Merge pull request #145 from GMagician/uniform-with-arduino
Standardize pins count
2019-07-24 16:12:11 -04:00
GMagician
5e7f7a14bb Standardize pins count
Arduino framework doesn't force unsigned (checked in different boards).
This also prevent undesired warnings in Marlin Firmware
2019-07-24 22:06:11 +02:00
ladyada
d8b0ad85c3 fix for rev C 2019-07-23 17:06:24 -04:00
Limor "Ladyada" Fried
0b069c10e7
Merge pull request #143 from GMagician/fix-analog-count
Update nr of analog input
2019-07-22 12:25:27 -04:00
GMagician
56b5392088 Update nr of analog input
Following #125
2019-07-22 17:22:49 +02:00
Limor "Ladyada" Fried
751cec6c03
Merge pull request #140 from hathach/fix-samd51-ram-macro
Fix samd51 ram macro
2019-07-17 12:45:57 -04:00
hathach
2568b78213 use __SAMD51__ macro for io.h 2019-07-17 14:26:48 +07:00
hathach
3bb94f51b8 fix RAMSTART, RAMSIZE, RAMEND for samd51 and same21 2019-07-17 12:45:44 +07:00
ladyada
51461f9a3a add tinyusb midi support 2019-07-15 15:53:35 -04:00
ladyada
f8208799be Merge branch 'master' into hallowings 2019-07-14 17:40:51 -04:00
ladyada
70240054fb fix pin numberings 2019-07-14 17:40:37 -04:00
ladyada
9e2724918c update naming 2019-07-13 16:17:07 -04:00
Limor "Ladyada" Fried
68e65f2b9a
Merge pull request #138 from hathach/master
fix incorrect midi descriptor template
2019-07-08 23:41:07 -04:00
hathach
fa04386790 fix incorrect midi descriptor template 2019-07-09 10:38:04 +07:00
Limor "Ladyada" Fried
961c470159
Merge pull request #137 from hathach/master
fix auto descriptor's auto interface e.g MIDI interface
2019-07-08 12:16:14 -04:00
hathach
edc13ba71f add itfnum to getDescriptor() 2019-07-08 22:49:05 +07:00
ladyada
e8303705b3 fix missing dac1 definition (on stemma connector) 2019-07-07 18:57:11 -04:00
Limor "Ladyada" Fried
b216a22e0e
Merge pull request #136 from hathach/master
fix MIDI with window driver
2019-07-06 20:20:24 -04:00
hathach
11d6f547c3 midi only use audio 1.0 without IAD 2019-07-05 16:44:38 +07:00
ladyada
692b4a6944 hallowing m4 2019-07-04 13:21:32 -04:00
Limor "Ladyada" Fried
855523d669
Merge pull request #135 from hathach/tinyusb-midi
enable TinyUSB MIDI
2019-07-03 15:26:38 -04:00
hathach
ff7b62d45b enable usb midi in tusb_config.h 2019-07-04 01:48:24 +07:00
hathach
0aa2b2fcb6 update tinyusb to support midi 2019-07-04 01:48:08 +07:00
Limor "Ladyada" Fried
5c318aad3b
Merge pull request #134 from beeryt/patch-1
Wiring: Clean up repeated pin description access
2019-07-03 12:26:10 -04:00
T. Carl Beery
206a7acd99
Wiring: Clean up repeated pin description access 2019-07-03 08:24:06 -07:00
ladyada
d9ef135999 Merge branch 'hallowings' of github.com:adafruit/ArduinoCore-samd into hallowings 2019-06-29 00:29:16 -04:00
ladyada
3688c468ce fix some mask GPIO - add hallowing m4 (TFT untested) 2019-06-29 00:28:58 -04:00
Phillip Burgess
3b0115cffc SERCOM3 pad juggling for PDM 2019-06-27 18:21:39 -07:00
ladyada
5078941dfb some stuff working on mask (i2c, audio) 2019-06-25 21:32:32 -04:00
Limor "Ladyada" Fried
1672e7124b
Merge pull request #132 from kaysievers/master
USBCore: Read the SAMD51 serial number
2019-06-24 09:24:47 -04:00
Kay Sievers
23fd362a72 USBCore: Read the SAMD51 serial number
Export the unique hardware serial number from the SAMD51 MCU
to the USB device descriptor.

Remove the concatenation of the USB class device string, it is
superfluous, and an USB interface property should not become a
part of the USB device property.

Tested on SAMD21 and SAMD51:

Before:
  SAMD21: 10BD8E4051504C3750202020FF0B1410MIDI
  SAMD51: MIDI

After:
  SAMD21: 10BD8E4051504C3750202020FF0B1410
  SAMD51: AAFC165853574E514D202020FF083C44
2019-06-23 22:02:35 +02:00
Limor "Ladyada" Fried
5c60a5ac21
Merge pull request #130 from brentru/add-pybadge-airlift-m4
Add PyBadge AirLift
2019-06-20 13:33:46 -04:00
Limor "Ladyada" Fried
fd0d925466
Merge pull request #131 from brentru/add-nina-naming
Add NINA_ACK to WiFi Boards
2019-06-20 13:31:14 -04:00
brentru
616f0c929a add to pyportal 2019-06-20 11:14:52 -04:00
brentru
92d99e90ad add NINA_ACK standard pin 2019-06-20 11:12:33 -04:00
Limor "Ladyada" Fried
9b2e698f6b
Merge pull request #125 from GMagician/Fix-analogInputToDigitalPin
Fix analogInputToDigitalPin for Grand Central M4
2019-06-15 23:00:35 -04:00
ladyada
b2cf1b106c bump version, remove -g flags 2019-06-15 23:00:04 -04:00
ladyada
66a844f050 fix for trinket/gemma m0 2019-06-15 22:59:15 -04:00
brentru
135eb717f4 add tft pins 2019-06-14 10:09:44 -04:00
Giuliano Zaro
29bfe96f8e
Fix compiler error
Removed unnecessary bracket
missing usb padcal
2019-06-14 11:35:05 +02:00
brentru
c94e1598bf adding correct number of pins, fix header guard, cleanup comments, rename to nina fw defaults 2019-06-13 18:27:41 -04:00
brentru
aa23d7a56f fix SS and ACK pins 2019-06-13 17:55:07 -04:00
brentru
4269f8a3f3 add correct ESP32 pins 2019-06-13 16:16:38 -04:00
brentru
d78c105f08 add SPIWIF_ACK 2019-06-13 15:37:59 -04:00
brentru
ff27aa43e9 add updated pin variant 2019-06-13 15:29:38 -04:00
brentru
d1ae3d83af added variant for pybadge airlift, modified pins in variant.cpp to reflect schematic 2019-06-12 14:55:10 -04:00
brentru
e95527efbb changed size to match J20 size 2019-06-12 14:24:28 -04:00
brentru
b2dab994af added pybadge airlift to boards.txt 2019-06-12 14:17:20 -04:00
ladyada
cec0a6bd7d add opts all around 2019-06-09 22:11:04 -04:00
ladyada
b89404cf52 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2019-06-08 13:50:39 -04:00
ladyada
02d93cca94 more opts! and advance 2019-06-08 13:50:34 -04:00
GMagician
7a550677bc [SAMD51] Add softwater calibration init on startup
Use calibration software area fuses to initialize devices
2019-06-08 18:45:23 +02:00
GMagician
3c7073326c Fix analogInputToDigitalPin for Grand Central M4 2019-06-06 18:57:08 +02:00
Limor "Ladyada" Fried
c84ce7edb1
Merge pull request #122 from hathach/tinyusb
run usb background when checking for Serial.available() if needed
2019-06-05 14:12:33 -04:00
hathach
34389498c5
yield() if needed when calling Serial.write() 2019-06-05 23:09:44 +07:00
hathach
a89950536a
run usb background when checking for Serial.available() if needed 2019-06-05 17:37:15 +07:00
ladyada
d787240dab add debug flag option 2019-06-03 18:45:22 -04:00
Limor "Ladyada" Fried
3ca3967711
Merge pull request #121 from adafruit/tinyusb
windows serial fix
2019-05-27 14:44:11 -04:00
Limor "Ladyada" Fried
c85d59c371
Merge pull request #120 from hathach/adafruit-tinyusb
fix windows serial issue
2019-05-27 14:43:11 -04:00
hathach
f8ad400ff2 fix serial issue with windows 2019-05-27 18:50:15 +07:00
Limor "Ladyada" Fried
b73c167ce0
Update platform.txt
Big update since we've added so much!
2019-05-26 23:33:44 -04:00
Limor "Ladyada" Fried
a027455d39
Merge pull request #119 from hathach/adafruit-tinyusb
fix load_serial_number() warning
2019-05-26 23:05:30 -04:00
hathach
4e4e2846f9 fix load_serial_number() warning 2019-05-25 14:01:25 +07:00
Limor "Ladyada" Fried
e7c57199e8
Merge pull request #117 from adafruit/tinyusb
Tinyusb branch
2019-05-24 01:54:00 -04:00
Limor "Ladyada" Fried
918d820d53
Merge pull request #118 from hathach/adafruit-tinyusb
fix tinyusb hid raw inout issue
2019-05-24 01:53:50 -04:00
hathach
3faad0375e fix tinyusb hid raw inout issue 2019-05-24 12:50:39 +07:00
Limor "Ladyada" Fried
6194fc367b
Merge pull request #116 from adafruit/pb-spi
Merge Adafruit_ZeroDMA into SAMD core libraries
2019-05-23 02:43:25 -04:00
Phillip Burgess
9a07f418ce SPI DMA transfer() function working now 2019-05-22 21:35:58 -07:00
Phillip Burgess
8b88806d46 SPI DMA still WIP still not working 2019-05-22 21:11:49 -07:00
Phillip Burgess
8f123f315b SPI DMA WIP and still not working :/ 2019-05-22 14:22:50 -07:00
Phillip Burgess
99b90ffb48 DMA WIP still not working 2019-05-22 11:17:52 -07:00
Phillip Burgess
91e43ef443 SPIClass DMA transfer() function WIP 2019-05-21 22:14:45 -07:00
Limor "Ladyada" Fried
595aa2c126
Merge pull request #115 from hathach/adafruit-tinyusb
minor enhancement for usb cdc
2019-05-21 22:21:33 -04:00
hathach
217fe38647 move yield() usb background in to TinyUSB Core 2019-05-22 09:02:24 +07:00
hathach
a75a324a4c fix TinyUSB stack read signed char 2019-05-22 08:59:10 +07:00
hathach
404c9e4068 improve TinyUSB port
add yield to stream timeRead() timePeek() and Serial::bool()
2019-05-22 00:48:41 +07:00
Phillip Burgess
10b8b55c27 Move Adafruit_ZeroDMA into SAMD core so SPI lib can rely on it 2019-05-20 22:26:17 -07:00
Limor "Ladyada" Fried
212c1922ba
Merge pull request #114 from hathach/adafruit-tinyusb
sync with master
2019-05-16 21:48:33 -04:00
hathach
0f22c475f5 Merge remote-tracking branch 'adafruit/master' into adafruit-tinyusb 2019-05-17 08:45:53 +07:00
hathach
a524e2cbea
add Adafruit_TinyUSB_Core_touch1200() 2019-05-15 23:32:56 +07:00
hathach
b148e8a614 update tinyusb 2019-05-15 23:26:45 +07:00
ladyada
3f79b9db6f add extra PID option https://github.com/adafruit/ArduinoCore-samd/issues/113 2019-05-13 17:22:49 -04:00
Limor "Ladyada" Fried
f36d409355
Merge pull request #112 from hathach/adafruit-tinyusb
update tinyusb
2019-05-13 01:01:48 -04:00
hathach
3e415ba7be
add tud_cdc_write_flush() call in main() and yield() 2019-05-12 23:51:37 +07:00
hathach
5632e53759
update tinyusb tud_descriptor_configuration_cb 2019-05-12 20:01:18 +07:00
hathach
caf36be549
update tinyusb for new string/hid/device/config descriptor callback 2019-05-12 15:45:42 +07:00
hathach
c727f2b197 update usb core to use tud_descriptor_string_cb() 2019-05-11 23:34:46 +07:00
Limor "Ladyada" Fried
60c0542463
Merge pull request #111 from adafruit/pb-spi
Fix typedef syntax
2019-05-11 00:40:07 -04:00
Phillip Burgess
4b57e88b4b Fix typedef syntax 2019-05-10 21:26:30 -07:00
Limor "Ladyada" Fried
01ea159d19
Merge pull request #110 from adafruit/pb-spi
Better SPI SERCOM clock control
2019-05-10 21:33:23 -04:00
Phillip Burgess
e86546521f Separated getDMACID() function into getDMAC_ID_TX() and getDMAC_ID_RX() 2019-05-10 17:46:33 -07:00
Phillip Burgess
adc7241859 REMOVE M4 boards "Max SPI" menu 2019-05-09 13:18:53 -07:00
Limor "Ladyada" Fried
d81bda401e
Merge pull request #109 from hathach/adafruit-tinyusb
fix tinyusb bug with clear stall and reset data toggle
2019-05-09 13:37:17 -04:00
hathach
0552d34dab Merge remote-tracking branch 'adafruit/master' into adafruit-tinyusb 2019-05-10 00:12:33 +07:00
hathach
af90d98a6e fix samd dcd_clear_stall also reset data toggle 2019-05-10 00:08:23 +07:00
hathach
3c5f92d49d better use USE_TINYUSB for stack detection 2019-05-09 23:50:20 +07:00
hathach
4f9fef7b0e update tinyusb lib 2019-05-09 23:49:44 +07:00
Phillip Burgess
7616dab297 SERCOM stuff - simplify, cleanup, add SAMD21 dummy funcs 2019-05-08 09:44:05 -07:00
Phillip Burgess
651862fd47 WIP SPI SERCOM clock source changes 2019-05-07 23:30:55 -07:00
Phillip Burgess
59d869d79d WIP change SPI SERCOM clock source at runtime rather than compile-time 2019-05-07 23:05:52 -07:00
ladyada
d331767eac woops wrong PIDs 2019-05-03 03:03:29 -04:00
hathach
e770ae4301 error message when compile usb demo without selecting it 2019-05-03 13:14:59 +07:00
Limor "Ladyada" Fried
cd0f54edfc
Merge pull request #108 from hathach/adafruit-tinyusb
fix load serial string based on device id
2019-05-03 02:11:45 -04:00
hathach
dda4eaf546 fix load serial string based on device id 2019-05-03 13:07:19 +07:00
Limor "Ladyada" Fried
4d317b03dc
Merge pull request #107 from hathach/adafruit-tinyusb
add bi-directional HID
2019-05-03 01:00:51 -04:00
hathach
c21b6014b6 add hid bufsize 2019-05-03 00:00:58 +07:00
hathach
71922ef9e2 Merge branch 'tinyusb' into adafruit-tinyusb 2019-05-02 21:05:40 +07:00
hathach
96075f637e update tinyusb to support bi-directional HID 2019-05-02 21:01:36 +07:00
Limor "Ladyada" Fried
7a2e3e1a99
Merge pull request #106 from hathach/adafruit-tinyusb
Add TinyUSB as optional usb stack (drop down selection)
2019-04-30 16:01:31 -04:00
hathach
ab16f9899d add menu dropdown list for usb stack selection 2019-05-01 01:01:59 +07:00
brentrubell
498429e7a8 rename nina to esp32_, redefine NINA_ (#105) 2019-04-29 17:31:13 -04:00
hathach
617cc6c596 rename usb core folder 2019-04-30 00:21:13 +07:00
hathach
9c07070580 get msc & hid example work with metro m0 express 2019-04-30 00:12:17 +07:00
ladyada
ff2cb608a9 fix wrong SPI pins 2019-04-27 14:25:50 -04:00
ladyada
bf24eaaf7d match pybadge better 2019-04-27 02:25:36 -04:00
ladyada
356bf82843 annotate ADCs 2019-04-26 22:54:54 -04:00
ladyada
71e953f011 fix variant multi-define complaints 2019-04-26 22:49:41 -04:00
ladyada
f2f99a2392 allow non '51s to compile 2019-04-24 13:27:25 -04:00
ladyada
beb338ebea post-release fixes, including hopefully automated travis builds 2019-04-24 13:06:10 -04:00
ladyada
e40e387213 Fix for https://github.com/cstawarz 2019-04-24 12:47:02 -04:00
ladyada
046de9b4af move build flags to platform 2019-04-24 00:34:44 -04:00
ladyada
22efce962f fix backlight timer PWM 2019-04-23 23:29:59 -04:00
ladyada
54768abed7 woops forget to setup serial pins as sercoms 2019-04-23 16:30:05 -04:00
Paint Your Dragon
eb639a9bd7 Change QSPI menu (#104)
* Add QSPI menu, fix SPI compiler settings for some boards

* Change QSPI menu (fast = F_CPU/2)
2019-04-22 23:07:57 -04:00
Paint Your Dragon
3ec33c9c02 Add QSPI menu, fix SPI compiler settings for some boards (#103) 2019-04-22 22:01:37 -04:00
ladyada
1b780ba76d Merge branch 'master' of https://github.com/arduino/ArduinoCore-samd 2019-04-22 16:40:53 -04:00
ladyada
68ff9d5402 typo fix for https://github.com/adafruit/ArduinoCore-samd/issues/99 2019-04-22 16:37:54 -04:00
ladyada
da400c7283 Merge branch 'pb-overclock' 2019-04-22 16:36:57 -04:00
ladyada
896b203184 we swapped backlight and reset on final design (to be more circuitpy-happy) 2019-04-22 16:30:21 -04:00
Phillip Burgess
2b2b8f0610 Add max SPI speed select menu for M4 2019-04-21 22:30:57 -07:00
ladyada
e35b44b997 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2019-04-21 01:55:18 -04:00
ladyada
39b621391b some alternate SPI's for CPX 2019-04-21 01:55:00 -04:00
ladyada
a89a0dfe23 tweaks to make gamebuino meta compile 2019-04-21 01:54:21 -04:00
Limor "Ladyada" Fried
bc8d8b861f
Overclocking and optimizer settings for M4 boards (#100) 2019-04-21 01:47:47 -04:00
Phillip Burgess
2061fe33c7 Overclocking and optimizer settings for M4 boards 2019-04-19 21:08:44 -07:00
ladyada
451a78e430 add pygamer, rename wifi to airlift 2019-04-18 12:18:11 -04:00
jesserod
bd082fa1f6 Do not initialize all pins to INPUT (#98)
Comment out the initialization of all SAMD21 pins to INPUT to allow them to remain tri-stated by default.   

See https://github.com/adafruit/Adafruit_SleepyDog/issues/17#issuecomment-481798215
2019-04-17 11:40:56 -04:00
Martino Facchin
cee8257749
Merge pull request #400 from sandeepmistry/mkrwan-spi1-sercom-fix
MKR WAN 1300: Correct sercom pads for SPI1
2019-04-11 17:59:41 +02:00
Sandeep Mistry
dea5340516 MKR WAN 1300: Correct sercom pads for SPI1 2019-04-11 11:52:15 -04:00
ladyada
d9d87d60d2 pybagdge non-final variant 2019-04-10 08:32:01 -04:00
ladyada
4f8619b918 re-add erase, change Tone TC to TC3 2019-04-10 08:31:22 -04:00
ladyada
904acd1071 speed up samd21 by not erasing (we auto-erase). add SPI1 for TFT connection 2019-04-07 16:36:18 -04:00
ladyada
a2d9587950 up to 24 mhz SPI on SAMD51. added another ESP32 def 2019-04-04 13:44:37 -04:00
Sandeep Mistry
5564125d7c Version 1.6.21 2019-04-01 10:18:03 -04:00
ladyada
9daef7b4b5 metro m4 with wifi! 2019-03-16 02:11:21 -04:00
ladyada
79fc15cdc5 fix merge 2019-03-08 17:12:10 -05:00
ladyada
94ac9318d0 Merge branch 'arduino-master' 2019-03-08 14:04:30 -05:00
ladyada
4d8adc9be4 Merge branch 'master' of https://github.com/arduino/ArduinoCore-samd into arduino-master 2019-03-08 14:03:54 -05:00
Riccardo Rizzo
07c2e57fe4 Changed POW_ON pin value on MKR1500's variant
Changed POW_ON pin value on MKRNB 1500 vatriant file, to allow the power on from MKRNB library.
2019-03-04 09:20:40 -05:00
ladyada
1b2de9f6de bump version 2019-03-01 20:32:55 -05:00
ladyada
d22831bcd7 no longer used 2019-03-01 20:30:40 -05:00
ladyada
ef5bf392c7 rearrange analog pins, let D3/D4 be a sercom 2019-03-01 20:28:07 -05:00
aryelevin
98e2a3e429 Some fixes to the startup code - clocks configs (#89)
* Reverted 1MHz clock generator to GCLK5 instead GCLK7
Fixed the clock divider of 1MHz clock generator to be 48 (its source is DFLL which clocking at 48MHz, so 48 / 48 = 1, it was 48 / 24 = 2).
Updated the PLLs to the proper Ratio afetr the change of the 1MHz clock source.
Disabled GCLK_GENCTRL_DIVSEL reg on the 12MHz clock generator, since this caused the clock to be 1.5MHz.

* Fixed a description comment.
2019-02-13 15:27:27 -05:00
ladyada
3f7a027cf1 Merge branch 'pb-portal'
# Conflicts:
#	boards.txt
2019-01-30 17:51:23 -05:00
ladyada
5df9f65eaf rev C 2019-01-30 17:49:35 -05:00
ladyada
3a32265142 we erase per sector on update anyway - this is a huge speedup! 2019-01-26 15:59:35 -05:00
ademuri
d2620a72d2 Fix analog ref enums. (#83)
AR_INTERNAL was removed in #74. Because of this, non-SAMD51 boards fail because AR_INTERNAL isn't defined.
This also define AR_INTERNAL_2V23, which is also used for non-SAMD51
boards.
2019-01-26 15:26:05 -05:00
brentrubell
2443eac3ac fix typo, add more board openocd configs, link in boards.txt (#82) 2019-01-23 11:05:52 -05:00
ladyada
6af6f7e417 we erase per sector anyways 2019-01-23 02:16:13 -05:00
ladyada
5de9436aae jlink openocd fixes (needs testing on non-windows) 2019-01-22 22:58:58 -05:00
ladyada
abbad5fcb0 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2019-01-22 21:27:29 -05:00
brentrubell
0145c48321 force jlink/swd, rename all m0 arduino_zero.cfg to board_name.cfg (#81) 2019-01-22 21:01:57 -05:00
Carter Nelson
eef12c3d91 fix Feather M4 I2S pins (#80) 2019-01-22 01:18:31 -05:00
brentrubell
d86ce47cd4 update programmers.txt file for seger jlink (#79) 2019-01-18 18:24:26 -05:00
ladyada
cf1d43cf7c add wifi esp32 support 2019-01-18 15:54:05 -05:00
ladyada
87d70e47d4 start defining some wifi pads 2019-01-18 01:32:58 -05:00
ladyada
74fc71a2f2 remove unavail timers! 2019-01-17 18:36:59 -05:00
Phillip Burgess
4cd8f8c0f2 Update boards.txt 2019-01-17 15:26:01 -08:00
Phillip Burgess
2bd27cd95f Update boards.txt 2019-01-17 15:24:43 -08:00
Phillip Burgess
134067bea8 Begin boards.txt entry, rename pyportal to pyportal_m4 2019-01-17 15:08:30 -08:00
Phillip Burgess
7506ded082 PyPortal variant work 2019-01-17 15:01:51 -08:00
Phillip Burgess
3580fc5847 Juggling pins 2019-01-17 14:49:33 -08:00
Phillip Burgess
1ea494ed0c Pin desc WIP 2019-01-17 14:35:07 -08:00
ladyada
e49bf19a9d Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2019-01-17 17:19:43 -05:00
Phillip Burgess
b0ec44506f More pyportal variant WIP 2019-01-17 12:30:56 -08:00
Phillip Burgess
23190e0165 More pin def WIP 2019-01-17 12:05:17 -08:00
Phillip Burgess
2d4ff30450 More pin def WIP 2019-01-17 10:28:04 -08:00
Phillip Burgess
aaddcc7eeb Initial PyPortal WIP 2019-01-16 23:10:59 -08:00
Phillip Burgess
6288f12695 Remove from wrong branch argh 2019-01-16 23:10:18 -08:00
Phillip Burgess
126e06acce Initial PyPortal WIP 2019-01-16 23:09:29 -08:00
ladyada
e4b25f2b53 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2019-01-12 12:40:18 -05:00
Florian Heilmann
458b5d9dd7 Fix 'Unused Parameter' warnings in HardwareSerial.h (#78)
This small change removes many of the warnings that are generated when compiling this core with warnings switched on.
2019-01-11 12:21:49 -05:00
Bill Westfield
2ca67fc36b Fix delayMicroseconds() on SAMD51 (#77)
* Fix pulseIn() on SAMD51 by writing it in plain C, so that
the CM0+-specific pulse_asm won't need to be linked.
The SAMD51 is fast enough that we can time pulses with micros()
Tested with a bunch of pulse lengths from <1us to >1s

* Implement a new delayMicroseconds() function for SAMD51
This version enables the "Debug Watchpoint and Trace" module (DWT)
in startup.c and then uses the 32bit cycle counter that is part
of DWT to count cycles indepenent of instruction timing.
Tested for good accuracy with various values between 1 and 2000us.
2019-01-09 19:57:43 -05:00
Bill Westfield
f4b1ecfcea Fix pulseIn() on SAMD51 by writing it in plain C, so that (#76)
the CM0+-specific pulse_asm won't need to be linked.
The SAMD51 is fast enough that we can time pulses with micros()
Tested with a bunch of pulse lengths from <1us to >1s
2019-01-09 12:05:51 -05:00
John Baker
166b43b8dc Update wiring_analog.c and wiring_analog.h (#74)
* Update wiring_analog.c and wiring_analog.h

* Correct typos in comments so voltages are correctly identified
2019-01-05 18:42:09 -05:00
Arturo Guadalupi
a69fbe34a5
Merge pull request #378 from sandeepmistry/MKR-sercom-juggle
MKR boards: I2C to sercom2, SPI1 + Serial2 to sercom4
2018-12-13 16:57:05 +01:00
Riccardo Rizzo
3b6466b5e6 More accurate delay() function from BenF.
porting of 67c0a1995a (diff-ab397febf179e1982f4ee0758df4c982)
2018-12-13 10:33:06 -05:00
Dan Halbert
2fed3d20e3 bump to version 1.2.9 for new release 2018-12-07 12:39:14 -05:00
Dan Halbert
ef69627363
Merge pull request #60 from dhalbert/no-win10-cpx-adafruit
Do not install CPX drivers on Windows 10
2018-12-07 10:36:18 -05:00
deanm1278
34b81c2c48
Merge pull request #70 from adafruit/dm-hallowing-pwm
fix pwm for m0
2018-11-29 15:47:55 -05:00
dean
0c9bb3488b DM: fix pwm initialization bug 2018-11-29 15:40:31 -05:00
Sandeep Mistry
f0ca3afab8 MKR boards: I2C to sercom2, SPI1 + Serial2 to sercom4 2018-11-29 14:03:37 -05:00
dean
c7fa463c0d DM: fix pwm? 2018-11-29 13:54:35 -05:00
Sandeep Mistry
97502e969d Update CHANGELOG 2018-11-28 09:57:03 -05:00
dean
c629896172 DM: add PWM to pins 8, 9, 10 on mega 2018-11-27 13:36:33 -05:00
Sandeep Mistry
9d83af3e05 Fix USB warnings 2018-11-27 09:39:36 -05:00
Sandeep Mistry
6e0a2b52fc Add SDU support for the MKR NB 1500 2018-11-27 09:18:41 -05:00
Martino Facchin
adc07537f0 Update platform version to 1.6.20 2018-11-27 09:39:06 +01:00
Sandeep Mistry
be9aa4b811 Re-order MKR boards.txt entried 2018-11-27 09:28:19 +01:00
Sandeep Mistry
622910313c Rebuild MKR NB 1500 bootloader 2018-11-27 09:25:54 +01:00
Sandeep Mistry
f7756d8012 Rename left over MKR NB-IoT 1500's to MKR NB 1500 2018-11-27 09:25:54 +01:00
Sandeep Mistry
da9bfe8cf9 Increase the default serial buffer size to 256 (variant can override via define) 2018-11-27 09:25:54 +01:00
Sandeep Mistry
4b24b9dcbb Disable h/w flow control on UART, set RTS to LOW on init
It’s not supported by the SARA-R410M
2018-11-27 09:25:54 +01:00
Sandeep Mistry
249cd86f2e Add SerialSARA as keyword 2018-11-27 09:25:54 +01:00
Sandeep Mistry
c48c0cabaf Add SARA DTR pin and enable SARA PWR ON in initVariant 2018-11-27 09:25:54 +01:00
Sandeep Mistry
0412ef805d Spilt the MKR NB IoT 1500 into it's own variant folder 2018-11-27 09:25:54 +01:00
Martino Facchin
253f211e16 Fix MKRNB name and module init 2018-11-27 09:24:22 +01:00
Martino Facchin
fc95e909c9 Add initial MKRNbIoT support 2018-11-27 09:24:22 +01:00
Martino Facchin
3d8acdc1c4 Add initial MKR-NbIoT bootloader 2018-11-27 09:24:22 +01:00
dean
37b81426ad DM: fix grandcentral SPI miso pad 2018-11-26 16:49:22 -05:00
ladyada
43ebb77dae Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2018-11-21 01:25:52 -05:00
ladyada
a0fd9d4ce8 adding upcoming pybadge 2018-11-21 01:25:48 -05:00
deanm1278
97bedc773f updates for pin numbering (#68)
* DM: grandcentral variant

* DM: updates for m4 mega

* DM: metro mega updates

* DM: fixes for mega m4 pcc

* DM: fix grandcentral boards.txt naming

* DM: remove openocd for samd51, fix include guards

* DM: remove unnecessary debug scripts for m4 boards

* DM: update grandcentral pin numbering
2018-11-20 13:55:01 -08:00
deanm1278
9828191030 add grand central m4 (#67)
* DM: grandcentral variant

* DM: updates for m4 mega

* DM: metro mega updates

* DM: fixes for mega m4 pcc

* DM: fix grandcentral boards.txt naming

* DM: remove openocd for samd51, fix include guards

* DM: remove unnecessary debug scripts for m4 boards
2018-11-20 08:26:01 -08:00
ladyada
714a93e1ab bump to add UART to trellis m4 2018-11-18 21:43:33 -05:00
ladyada
52c74804ff correction, no PWMs! 2018-11-18 21:43:07 -05:00
ladyada
8bb579cd86 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2018-11-18 19:50:51 -05:00
ladyada
6a14ce8ff4 add Serial1 on STEMMA connector 2018-11-18 19:48:18 -05:00
Riccardo Rizzo
4a6d6ee5ee fix freeze due to tone()
In file Tone.cpp added suffix -1LL to the costant in line 117 in order to avoid freeze for instance of tone(pin, 35000);
2018-11-16 09:15:45 -05:00
deanm1278
4d76c57a1a
Merge pull request #66 from adafruit/dm-pwm
pwm fixes
2018-11-12 12:34:49 -05:00
dean
f122ab9d5e DM: bump 2018-11-12 12:33:59 -05:00
dean
4429b05805 DM: fix samd21 dac resolution 2018-11-12 12:19:29 -05:00
dean
0a24711890 DM: update PWM for trellis m4 and m0 boards 2018-11-08 14:34:51 -05:00
dean
8b77387af4 DM: fix metro m4 pwm 2018-11-08 14:15:21 -05:00
dean
ddba3e4e6e DM: pwm fixes for feather 2018-11-07 18:03:57 -05:00
dean
83c5e15af2 DM: PWM fixes 2018-11-07 17:09:22 -05:00
dean
902d525d3c DM: add ADC1 support for SAMD51 2018-11-05 13:58:32 -05:00
dean
8e9ebb1cc9 DM: bump version, interrupt fixes 2018-11-05 13:25:21 -05:00
dean
bcfd9a0faa Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2018-11-05 13:18:13 -05:00
dean
0654cd01b3 DM: fix interrupt handling 2018-11-05 13:18:00 -05:00
ladyada
cba8004131 bump to re-add ios fix 2018-11-02 13:53:00 -04:00
ladyada
074fe0fa9b re-set to 100mA default for iOS support 2018-11-02 13:48:39 -04:00
dean
6631c1bef3 DM: bump 2018-11-01 13:36:10 -04:00
dean
a3f9fb1911 DM: add trellis line audio 2018-11-01 13:25:19 -04:00
ladyada
644b14707f fix mic pins 2018-10-24 01:22:26 -04:00
ladyada
37d51b625d Merge branch 'trellis_m4' 2018-10-24 00:53:45 -04:00
ladyada
77f8a5ecfb Merge branch 'master' into trellis_m4 2018-10-24 00:53:19 -04:00
ladyada
9860605b91 add dummy SPI, SDA/SCL analog ins, add some missing text 2018-10-24 00:45:24 -04:00
Cristian Maglie
bab730bf6e Better formatted boards.txt (same style) 2018-10-23 18:02:00 +02:00
Cristian Maglie
584e7bb4b5 Added defines to identify MKR layout 2018-10-23 18:02:00 +02:00
Helmut Tschemernjak
2ef5b7810e Added alternate ports 44,45 to make the SWCLK and SWDIO pins available
when no debugger is being used.
BTW. The presence of a debugger can be checked via:
if (DSU->STATUSB.bit.DBGPRES) ...
2018-10-23 13:53:59 +02:00
Gabriel Notman
253e40e736 Removes the requirement that the DAC is on A0 (which requires that A0 uses PA02) 2018-10-23 13:51:49 +02:00
gdsports
9ac80d9a3a Fix memory overwrite in USBHost
Fix issue #271.
2018-10-23 11:31:34 +02:00
Martino Facchin
3b38a41278 Inplement USBDevice.end() 2018-10-23 11:19:08 +02:00
Martino Facchin
d5557ec4b4 Clear _usbLineInfo structure on SerialUSB.end() 2018-10-23 11:19:08 +02:00
Mark Fischer
a6ab0f3bf6 Added method to return USB Error code. 2018-10-22 15:01:04 +02:00
ladyada
9453bd9417 add second Wire 2018-10-11 12:45:48 -04:00
Dan Halbert
efc0ad189f re-sign CPX driver, making sure line endings are correct 2018-10-10 22:47:11 -04:00
Dan Halbert
285ca1b285 fix webusb nullinstall and re-sign 2018-10-09 18:16:54 -04:00
Dan Halbert
0fd0659852 Merge remote-tracking branch 'adafruit/master' into no-win10-cpx-adafruit 2018-10-09 18:16:28 -04:00
ladyada
80daae0b36 crickit hat testing has I2S 2018-10-09 16:48:10 -04:00
ladyada
da5ef0b604 Merge branch 'trellis_m4' of github.com:adafruit/ArduinoCore-samd into trellis_m4
Conflicts:
	variants/trellis_m4/variant.cpp
	variants/trellis_m4/variant.h
2018-10-04 14:23:04 -04:00
ladyada
c91d182c84 rev C 2018-10-04 14:22:13 -04:00
dean
d2ef319833 DM: set all samd boards to 250k sps ADC 2018-10-01 13:17:34 -04:00
dean
00dd128b04 DM: update SAMD51 ADC sampling rate 2018-10-01 13:02:27 -04:00
dean
627c3c979f DM: udpate trellis pins 2018-10-01 12:33:06 -04:00
dean
f4daa1282b DM: update pins on trellis m4 2018-09-13 16:49:34 -04:00
dean
a959a48da2 DM: update readme 2018-09-10 11:44:16 -04:00
dean
d536980947 Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2018-09-10 11:41:24 -04:00
dean
a8e1302151 DM: fix variant for zeroi2s lib 2018-09-10 11:41:03 -04:00
ladyada
b4e55702aa Add crickit m0 (direct programming) 2018-09-09 18:44:17 -04:00
ladyada
b889b2b616 remove merge leftovers 2018-09-07 16:26:11 -04:00
dean
92e0e907be DM: version bump 2018-09-05 10:59:38 -04:00
dean
777a5eb523 DM: merge upstream 2018-09-04 13:51:47 -04:00
dean
249667c35a Merge branch 'master' into dm-upstream 2018-09-04 13:44:00 -04:00
dean
1de5f31752 DM: samd51 pwm fix for rebase 2018-09-04 12:02:26 -04:00
dean
bcc44cc6a1 DM: samd51 USB fix for rebase 2018-09-04 11:50:37 -04:00
dean
0c05d94c8a DM: fix analog write for rebase 2018-09-04 10:50:50 -04:00
ladyada
7ca1399dc5 first attempt 2018-09-02 12:28:55 -04:00
ladyada
d84b3fafc9 reduce reported current so we can use with iOS for gboard. no computer actually cares about this number, current isnt throttled or anything. 2018-09-01 17:05:41 -04:00
dean
b661033db6 DM: tc fix from rebase 2018-08-30 15:43:05 -04:00
dean
b7e942d924 DM: fix stuff from rebase 2018-08-30 15:40:15 -04:00
Limor "Ladyada" Fried
0e9c85f8a1 bump for hallowing 2018-08-30 15:13:58 -04:00
ladyada
5406ee109e update booty location 2018-08-30 15:13:58 -04:00
ladyada
a4bddae4da add bootloader 2018-08-30 15:13:57 -04:00
ladyada
a4dc0a0da1 all the PIDs 2018-08-30 15:13:57 -04:00
ladyada
a59bcf5c7a fixed & checked PWMs 2018-08-30 15:13:57 -04:00
ladyada
e529757d12 spi fix 2018-08-30 15:13:57 -04:00
ladyada
2adbff6c3f many things working 2018-08-30 15:13:57 -04:00
dean
116bf7ed6b DM: fix some feather m4 adc pins 2018-08-30 15:13:57 -04:00
dean
b8a8ca22a1 DM: fix feather m4 spi pin numbering 2018-08-30 15:13:57 -04:00
dean
07a8e6950c DM: add bootloaders 2018-08-30 15:13:57 -04:00
dean
0036770386 DM: fix PWM and move some channels around 2018-08-30 15:12:52 -04:00
ladyada
017e463b97 add analog divider on feather m4, remove extra SPI we aren't using (yet)
itsy m0 - remove confusing note on adc
2018-08-30 15:12:52 -04:00
ladyada
8c8e3bae34 fix feather m4 qspi 2018-08-30 15:12:51 -04:00
ladyada
76df193ec9 https://github.com/adafruit/ArduinoCore-samd/issues/50 2018-08-30 15:12:51 -04:00
ladyada
3b19e64860 get rid of variant header tables 2018-08-30 15:12:51 -04:00
ladyada
96cb9a9834 bump! 2018-08-30 15:12:51 -04:00
ladyada
1b11d2e19f feather m4 cache 2018-08-30 15:12:51 -04:00
ladyada
7662f63720 lil typo 2018-08-30 15:12:51 -04:00
ladyada
72dae131e6 fix for https://github.com/adafruit/ArduinoCore-samd/issues/49 2018-08-30 15:12:51 -04:00
ladyada
bb6648d8b7 enable feather m4 2018-08-30 15:12:51 -04:00
dean
f2c53a4c1f DM: update feather variant 2018-08-30 15:12:51 -04:00
dean
87eae6f55c DM: add copyrights 2018-08-30 15:12:51 -04:00
ladyada
00c192f596 fix up all the PWMs 2018-08-30 15:12:51 -04:00
ladyada
cc6ad179ec bump 2018-08-30 15:12:51 -04:00
ladyada
19e4a449f4 re-fix xtalless, add cache & freq fix 2018-08-30 15:12:33 -04:00
Limor "Ladyada" Fried
b517015248 Itsybitsy m4 support (#44)
* trying out some itsystuff

* remove I2S, fix QSPI pins, swapped D12 and D13. SPI not working (related to xternal xtal)

* SPI workin now!
2018-08-30 15:12:32 -04:00
ladyada
f49c152ddd defines for built in neopix 2018-08-30 15:12:32 -04:00
dean
d6372a3b1e DM: don't use normal delay in analogWrite 2018-08-30 15:12:32 -04:00
dean
a110eb10db DM: update pwms, timer definitions 2018-08-30 15:12:32 -04:00
dean
a3493e3625 update clocks to match arduino samd 2018-08-30 15:12:32 -04:00
ladyada
49775dd780 see https://github.com/adafruit/ArduinoCore-samd/issues/37 2018-08-30 15:11:47 -04:00
ladyada
06ed8efc83 the evil DR MERTO strikes again!
fixes https://github.com/adafruit/ArduinoCore-samd/issues/38
2018-08-30 15:11:21 -04:00
ladyada
b6b81baa42 fix for https://github.com/adafruit/ArduinoCore-samd/issues/39 2018-08-30 15:11:21 -04:00
dean
d3421947f9 DM: fix some pwms 2018-08-30 15:11:21 -04:00
ladyada
4cbe2814d1 removed unused .a and fixed frequency 2018-08-30 15:11:21 -04:00
ladyada
4e15c70058 we have lots o pins >.< 2018-08-30 15:11:21 -04:00
dean
540780d3d1 DM: fix dac clock and first write bug 2018-08-30 15:11:21 -04:00
dean
87492c3a0d DM: fix dac not holding value bug 2018-08-30 15:11:21 -04:00
ladyada
62a71a015e lets start with two versions, we can bump up bossac for everything else later 2018-08-30 15:11:21 -04:00
ladyada
174cfa9c56 update for new bossac 2018-08-30 15:11:21 -04:00
ladyada
9ac99f22a4 update cmsis-atmel and bossac path (we'll see!) 2018-08-30 15:11:03 -04:00
ladyada
a39a9e63ce add PWMs on pin 0, 1, A3, A4 - tested! 2018-08-30 15:10:41 -04:00
ladyada
040b115a70 fix math.h complaints 2018-08-30 15:10:41 -04:00
ladyada
6b8d419c97 updated for neopixel to be on #40 like the silkscreen 2018-08-30 15:09:32 -04:00
dean
8106e6bfa4 DM: fix interrupts, pcc pins 2018-08-30 15:09:31 -04:00
Limor "Ladyada" Fried
6c57ca9860 Update README.md 2018-08-30 15:08:17 -04:00
dean
c22cb29d06 DM: delete mistake file 2018-08-30 15:08:17 -04:00
dean
fd07f12a72 DM: remove incorrect pins comment 2018-08-30 15:08:17 -04:00
dean
14f9fbf961 DM: update interrupt numbers on metro m4 2018-08-30 15:08:17 -04:00
dean
9b30cd8a59 DM: fix delay microseconds 2018-08-30 15:08:17 -04:00
ladyada
d048e2545e fix correct IRQ #'s (see DS) not a full sweep, just did pins that were relevant to my interests 2018-08-30 15:08:17 -04:00
ladyada
99029772de start of pirkey 2018-08-30 15:08:17 -04:00
dean
e9857aec00 DM: update pwms for samd51 2018-08-30 15:08:17 -04:00
dean
6f6a90f086 DM: fix feather m4 variant 2018-08-30 15:08:16 -04:00
dean
f618756fde DM: update feather m4 pinout for new rev 2018-08-30 15:08:16 -04:00
dean
0d70c98518 update pinout and stuff for new revision 2018-08-30 15:08:16 -04:00
dean
7f74c2126e update usb stuff 2018-08-30 15:08:16 -04:00
ladyada
56bde31366 prelim pirkey config 2018-08-30 15:07:36 -04:00
ladyada
8aa72c25c2 bump to add itsy 2018-08-30 15:07:36 -04:00
ladyada
2fb66ec5f5 Update itsybitsy for USB PIDs! 2018-08-30 15:07:36 -04:00
ladyada
32e3466fb8 add itsybitsy (needs PID update before release) 2018-08-30 15:07:13 -04:00
dean
42cef5fec5 DM: fix linker vfp arguments 2018-08-30 15:06:25 -04:00
dean
a7c2dccba2 DM: update feather m4 variant 2018-08-30 15:04:25 -04:00
dean
2c2eb81a42 DM: fixed m0 boards compilation error with math additions 2018-08-30 15:03:49 -04:00
dean
bbff6c115d DM: some I2S stuff 2018-08-30 15:03:29 -04:00
dean
f286f9e8d4 DM: added math libraries 2018-08-30 15:03:03 -04:00
dean
8086450e1d DM: fixed math lib paths for m0 boards 2018-08-30 15:02:00 -04:00
ladyada
4753f2789a add itsybitsy m0 variant (commented out) and bootloaders for all 2018-08-30 15:00:54 -04:00
dean
232ca2e2d5 DM: updated feather m4 variant for new rev 2018-08-30 14:59:48 -04:00
dean
f86a7b6af7 DM: updated magic number to match circuitpython stuff 2018-08-30 14:59:48 -04:00
dean
b8b35ee319 DM: fix worst bug in entire world 2018-08-30 14:59:48 -04:00
dean
fb011ea2a8 DM: we have a 12 bit dac lets use 2018-08-30 14:59:48 -04:00
jerryneedell
3ce572a739 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
cb018ca927 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
a8174a87c6 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
fcb2d5e3a1 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
e000ac4312 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
22b52b3714 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
01294d4c82 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
3e9cb6e1e0 Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
10dc65820b Update README.md 2018-08-30 14:59:17 -04:00
jerryneedell
5a3750eee6 Update README.md 2018-08-30 14:59:17 -04:00
dean
0908d0aee4 DM: fix tone 0 frequency 2018-08-30 14:59:17 -04:00
deanm1278
3f1cdb9d69 Update README.md 2018-08-30 14:59:17 -04:00
dean
2b0f87a73d DM: some usb host fixes (still not working) 2018-08-30 14:59:17 -04:00
dean
e3b37db367 DM: fix analog correction library 2018-08-30 14:59:17 -04:00
ladyada
ae2cb38ea0 rephrase 2018-08-30 14:59:16 -04:00
ladyada
bb2ffb8f20 ~markdown~ 2018-08-30 14:59:16 -04:00
ladyada
ed8ba637bb updated install procedure 2018-08-30 14:59:16 -04:00
ladyada
3aa0c4215b fix for Feather M0 #9 PWM 2018-08-30 14:59:16 -04:00
ladyada
32406390d9 move feather m0 out to its own variant and fix D8/D9 PWM/analog mixup 2018-08-30 14:59:16 -04:00
deanm1278
d3f69bf1bb Update README.md 2018-08-30 14:59:16 -04:00
dean
498e819a51 DM: fix upload bug 2018-08-30 14:59:16 -04:00
deanm1278
201a32d2d1 Update README.md 2018-08-30 14:59:16 -04:00
dean
cee9dc1ccb DM: updated variant for rev B 2018-08-30 14:59:16 -04:00
dean
d726669c33 DM: temp fix for rando failure bug, turn off C optimizations for now 2018-08-30 14:59:16 -04:00
dean
9eecac827b DM: updates for rev B 2018-08-30 14:59:16 -04:00
dean
03efcf3880 DM: update m4 bootloader for multiple targets 2018-08-30 14:58:45 -04:00
ladyada
54a07dd4da fix numbering for soft-SPI (tested) 2018-08-30 14:58:44 -04:00
ladyada
e3f8b6f736 working on getting sercoms working. i2c OK. serial is not :( 2018-08-30 14:58:44 -04:00
dean
a7277e6547 DM: adding feather m4 2018-08-30 14:58:44 -04:00
dean
6820318d33 DM: EIC and VARIANT_MCK fix 2018-08-30 14:58:20 -04:00
deanm1278
d10bf1e355 Update README.md 2018-08-30 14:56:11 -04:00
dean
dc93e828f0 DM: fixed USB enumeration bug in bootloader and core 2018-08-30 14:56:11 -04:00
dean
ea32efa806 DM: fixed ADC channel 2018-08-30 14:56:11 -04:00
dean
4c1bca832e DM: update sercom IRQs for M4 2018-08-30 14:56:11 -04:00
dean
850c490a53 DM: fixed dpll1 freq 2018-08-30 14:56:11 -04:00
dean
5d97371cfc DM: fixed VID/PID 2018-08-30 14:55:41 -04:00
dean
2f331f6f27 DM: updated bootloader size to 16k, fixed USB vid/pid 2018-08-30 14:55:41 -04:00
dean
33e58f40c4 DM: fixed SERCOM baud rates 2018-08-30 14:55:41 -04:00
dean
9ace80d803 DM: not crystalless 2018-08-30 14:54:36 -04:00
dean
01de36ef16 DM: oops committed wrong stuff, actually fixed DPLL problems 2018-08-30 14:54:36 -04:00
dean
1cc5f0cde4 DM: lets not feed PLLs from xosc 2018-08-30 14:54:36 -04:00
dean
dc5464d328 DM: in progress i2s / dma support 2018-08-30 14:54:35 -04:00
dean
8a32178667 DM: bugfixes 2018-08-30 14:53:34 -04:00
dean
059b15f5dd DM: added FPU support 2018-08-30 14:53:34 -04:00
dean
785aea4f65 DM: fixed DAC, SPI 2018-08-30 14:53:33 -04:00
ladyada
cd28348678 not having any SPI breaks things - maybe just have a 'fake' sck+mosi only SPI for sercom 0? 2018-08-30 14:52:17 -04:00
dean
cf0304d31e DM: fixed i2c pins 2018-08-30 14:52:17 -04:00
dean
27f7ba229b DM: variant changes got bonked 2018-08-30 14:52:17 -04:00
ladyada
c97eba9792 add gemma & trinket m0 2018-08-30 14:51:34 -04:00
dean
2ce0635ebc DM: added metro m4 variant 2018-08-30 14:51:09 -04:00
ladyada
c1ce890973 rename and assign VID/PID 2018-08-30 14:47:27 -04:00
ladyada
bc2a5fc4be trinket m0 start 2018-08-30 14:46:42 -04:00
dean
c1827b289d DM: added support for samd51J20A 2018-08-30 14:46:42 -04:00
dean
4810822d26 DM: mostly fixed usb enumeration delay 2018-08-30 14:44:35 -04:00
dean
b5c2b6483b DM: clocked to 120MHZ, peripherals to 100, USB to 48 2018-08-30 14:44:35 -04:00
deanm1278
906a82cf19 Update README.md 2018-08-30 14:44:35 -04:00
dean
77a2f2e9ea DM: fixed tone 2018-08-30 14:44:35 -04:00
dean
0a2393f4ce DM: fix switching between dac output and analogread 2018-08-30 14:44:35 -04:00
Phillip Burgess
158ed33b1c Allow attachInterrupt() on NMI pin (PA08 on ATSAMD21E) 2018-08-30 14:44:35 -04:00
deanm1278
c4059a4678 Update README.md 2018-08-30 14:34:14 -04:00
dean
df5669a403 DM: fixed pwm and dac (almost) 2018-08-30 14:34:14 -04:00
ladyada
03eae9b5c5 Add Gemma m0 - tested just about everything 2018-08-30 14:34:13 -04:00
deanm1278
9f3014cb11 Update README.md 2018-08-30 14:32:21 -04:00
dean
358b11addd DM: added samd51 support 2018-08-30 14:32:21 -04:00
ladyada
d467e7f8e0 no longer needed 2018-08-30 14:27:56 -04:00
ladyada
5c6b839ccf bump! 2018-08-30 14:27:56 -04:00
ladyada
cfff0e62e2 removed unneeded libs 2018-08-30 14:27:56 -04:00
ladyada
597ce16e94 unknown why but if pin has analog set it variant, pwm doesnt work. just fixing for now 2018-08-30 14:27:56 -04:00
ladyada
22fd84a4e5 right variant to match rev G 2018-08-30 14:27:56 -04:00
ladyada
ba23a78c3e bump version 2018-08-30 14:27:56 -04:00
ladyada
aa878eb2d9 nicer #Defines 2018-08-30 14:27:40 -04:00
ladyada
2958c819fc rev g varianty 2018-08-30 14:27:40 -04:00
ladyada
80c608e49d update for rev F - we'll manually config i2s since we dont need an fs pin 2018-08-30 14:27:40 -04:00
ladyada
79910e7078 re-bump 2018-08-30 14:27:40 -04:00
ladyada
1c40219b0a oops, forgot! 2018-08-30 14:27:40 -04:00
ladyada
f8a465f554 bump version! 2018-08-30 14:27:40 -04:00
ladyada
07d3344a37 fix SPI1 - tested 2018-08-30 14:27:14 -04:00
ladyada
97cb76f5fb new variant for feather m0 express (it has second SPI port) 2018-08-30 14:27:14 -04:00
ladyada
41ebeb244c ignore emacs saves 2018-08-30 14:27:14 -04:00
ladyada
3615cb1b47 bigger buffer for Wire 2018-08-30 14:27:14 -04:00
ladyada
f12780c841 fix for quote-needing paths 2018-08-30 14:27:14 -04:00
ladyada
7cb6f9f013 fix analog pins, I2S not working yet 2018-08-30 14:27:14 -04:00
ladyada
5f31442514 add SPI flash SS pin 2018-08-30 14:27:14 -04:00
ladyada
a88c67c058 add metro m0 variant 2018-08-30 14:26:40 -04:00
ladyada
87fafb6b71 add qtouch library and linking 2018-08-30 14:26:40 -04:00
ladyada
9cfb56f632 fix pid for bootloader 2018-08-30 14:26:06 -04:00
ladyada
73511525aa rev D hardware match 2018-08-30 14:25:49 -04:00
ladyada
4653c8ea67 oops fix merge conflict 2018-08-30 14:24:57 -04:00
ladyada
cf32432125 unknown change but commiting anyhow (we dont use the files) 2018-08-30 14:24:33 -04:00
ladyada
f706a1ef90 bump version 2018-08-30 14:24:33 -04:00
ladyada
8d5ac4304a another A6/A7 fix 2018-08-30 14:24:09 -04:00
ladyada
c5b8cb239a revert platform, will try again later :/ 2018-08-30 14:23:32 -04:00
your name
dcb19c63cd add linux bossac 2018-08-30 14:23:32 -04:00
Tony DiCola
b0925d0876 Tweak platform.txt to use OSX bossac. 2018-08-30 14:23:32 -04:00
Tony DiCola
11700d47e7 Added bossac_osx with +x privilege. 2018-08-30 14:23:32 -04:00
ladyada
af6adf5e9d mac bossac 2018-08-30 14:23:32 -04:00
ladyada
1928329a9e fix platform path 2018-08-30 14:23:32 -04:00
ladyada
2af52bc418 bump platform version 2018-08-30 14:23:31 -04:00
ladyada
28cc4bb327 comment out radio but fix adc support in zero on the extra pins 2018-08-30 14:23:31 -04:00
ladyada
b34deb4e81 align back to mainline (and put in missing Serial5) - not sure if USB serial LEDs were causing hangups on 1200baud bumps? :/ 2018-08-30 14:23:07 -04:00
ladyada
331b74812b radio workin, all pins accounted for
USB reset->boot and baud set (?) is flakey, probably made a typo during USB port earlier
2018-08-30 14:22:24 -04:00
ladyada
c6ef70c488 SPI1 tested & works 2018-08-30 14:22:24 -04:00
ladyada
b371b8d07e first pass at variant. Serial1 on sercom5, SPI on sercom 2 working 2018-08-30 14:22:24 -04:00
ladyada
242f880280 bump version! 2018-08-30 14:22:23 -04:00
ladyada
90de1cee0d make readme less confusing, so people dont think its the official core! 2018-08-30 14:21:57 -04:00
ladyada
0d4056537c stashing - still need to do the variant! 2018-08-30 14:21:27 -04:00
ladyada
2073548bab clumsy but has correct bossac and can upload&reset ( it seems ) 2018-08-30 14:21:27 -04:00
ladyada
61afe92f2a well, it compiles now! 2018-08-30 14:21:27 -04:00
ladyada
d19c8e35a9 cleaned up slight difference in USB union bitflags with a new USBDevice.h - compiles blink 2018-08-30 14:21:26 -04:00
ladyada
605017712a fixed up DAC refs 2018-08-30 14:20:50 -04:00
ladyada
0e7cfdb088 feather bootloader files 2018-08-30 14:20:06 -04:00
ladyada
a3bd40c58e merge with upstream, pulse LED & VID/PID change for bootloader 2018-08-30 14:20:06 -04:00
ladyada
17f793efa9 woot, that wasnt too bad - updated debug for Serial1, works nicely 2018-08-30 14:20:06 -04:00
ladyada
54cc0b2725 Working demo with nice status change notifications 2018-08-30 14:20:06 -04:00
ladyada
895d0d2c9a manually did https://github.com/arduino/ArduinoCore-samd/pull/88 and tested - fixes keyboardcontroller sluggishness 2018-08-30 14:20:06 -04:00
ladyada
a4aed8f7a3 use Serial1 option for debug output (since USB port is taken) 2018-08-30 14:19:12 -04:00
ladyada
9fbb280857 fix random init() call, set debug output to Serial1 2018-08-30 14:19:12 -04:00
ladyada
ae249718d4 add USB CDC RX & TX LEDs with 10ms minimum on time, tested 2018-08-30 14:18:05 -04:00
ladyada
9aa23a8f3a add metro m0 (testing) 2018-08-30 14:13:54 -04:00
Andre Price
f23b66bed0 Keep ARDUINO_SAMD_ZERO flag for compatilibity
- Instead of removing it in favor of ARDUINO_SAMD_FEATHER_M0 have both
  flags present to increase chances of compatibility with libraries.
2018-08-30 14:13:35 -04:00
Andre Price
2ebe579722 Update Board for Feather M0 2018-08-30 14:13:13 -04:00
ladyada
d2571a3184 Serial5 not available anyhow 2018-08-30 14:12:25 -04:00
ladyada
012d86c1d3 make it so native USB is Serial 2018-08-30 14:12:25 -04:00
Limor "Ladyada" Fried
cf623ef06c Update platform.txt
add subver so we can find it!
2018-08-30 14:10:10 -04:00
Todd Treece
9eda56e7db adds new boards.txt 2018-08-30 14:09:49 -04:00
Todd Treece
006870ed46 reverts bootloaders/zero changes 2018-08-30 14:07:08 -04:00
Todd Treece
d6af8a989b adds bootloaders/feather 2018-08-30 14:04:43 -04:00
ladyada
4e41949c96 add support for A6 (D8) and A7 (D9) 2018-08-30 14:03:04 -04:00
ladyada
64ea2e8521 makefile now compiles from within Roaming/Arduino15 subfolder 2018-08-30 13:59:19 -04:00
ladyada
f8481c1ae9 pulse D13 LED during bootloader active 2018-08-30 13:59:19 -04:00
ladyada
a62ef21615 fix makefile for easier programming 2018-08-30 13:58:07 -04:00
gdsports
cd52f7148f Remove rather than comment out code 2018-08-30 10:33:41 -04:00
gdsports
5e6e6d1018 Fix USB Host failures
#342
2018-08-30 10:33:41 -04:00
Juraj Andrassy
35cae15a74 platform.txt - added arduinoOTA upload keys for Arduino M0 (AVRDUDE) 2018-08-30 10:27:09 -04:00
Juraj Andrassy
dd2916f139 SDU for Arduino M0 2018-08-30 10:27:09 -04:00
Martino Facchin
691b288d5f
Merge pull request #352 from facchinm/fix_usb_ep_reconnect
Always call new DoubleBufferedEPOutHandler on reconnect
2018-08-28 11:08:48 +02:00
Dan Halbert
bdfe4a952b do not install CPX drivers on win10 2018-08-27 09:51:53 -04:00
Dan Halbert
69d73daa6a CPX fixes: add &MI_00 to all devices so CPLAYBOOT is not hidden on Windows 10 2018-08-27 09:51:46 -04:00
Martino Facchin
f4dfac890f Always call new DoubleBufferedEPOutHandler on reconnect
Avoid memory leak by deleting the buffers; DoubleBufferedEPOutHandler should be refactored (in beta branch) to allow separate "new" and "setup" procedures

Fixes #350
2018-08-24 12:24:49 +02:00
Martino Facchin
a8eec3b745
Merge pull request #351 from better-adapted/patch-1
Update Makefile
2018-08-24 11:57:01 +02:00
better-adapted
879b4c7eeb
Update Makefile 2018-08-24 09:29:06 +01:00
Sandeep Mistry
a62ef2633b UART frame error handling 2018-08-17 16:37:47 -04:00
Limor "Ladyada" Fried
73a5b119aa
bump for hallowing 2018-08-15 14:30:07 -04:00
Dan Halbert
9f9d2c7b7e do not install CPX drivers on win10 2018-08-14 21:20:10 +02:00
Sandeep Mistry
09f867e86d I2S: Use 8 MHz oscillator source if 48MHz divider does not fit in 8 bits 2018-07-31 14:49:29 +02:00
Dan Halbert
e7ebbdfcb1 CPX fixes: add &MI_00 to all devices so CPLAYBOOT is not hidden on Windows 10 2018-07-31 14:45:08 +02:00
ladyada
4663eada02 update booty location 2018-07-29 19:35:13 -04:00
ladyada
d0b00b51f4 add bootloader 2018-07-29 19:33:39 -04:00
ladyada
314fcba6b6 all the PIDs 2018-07-29 19:04:39 -04:00
ladyada
f0312c1b1b fixed & checked PWMs 2018-07-29 19:03:04 -04:00
ladyada
2fbfee3c2b spi fix 2018-07-28 15:51:40 -04:00
ladyada
2b7afb587e Merge branch 'master' of github.com:adafruit/ArduinoCore-samd 2018-07-27 23:29:29 -04:00
ladyada
67dc620347 many things working 2018-07-27 23:29:22 -04:00
Helmut Tschemernjak
906dbd95a6 Added c++ linker command to allow to include libstdc++ when linking. (#276)
Added c++ linker command to allow to include libstdc++ when linking
2018-07-11 16:56:08 +02:00
per1234
07925f2515 Replace boolean type with bool in examples
This is part of a move to encourage use of the standard bool type over Arduino's non-standard boolean type alias.
2018-07-11 16:53:11 +02:00
Cristian Maglie
de0fa4f32d Re-signed Adafruit_Circuit_Playground_Express.inf 2018-07-11 15:28:49 +02:00
Cristian Maglie
2b39158477 Updated Windows Drivers to 1.4.0
added support for:

- MKR WiFi 1010
- MKR Vidor 4000
- MKR NB 1500
2018-07-11 15:28:49 +02:00
Sandeep Mistry
9132c4a161 Add SDU support for MKR WiFi1010 2018-07-04 08:55:12 -04:00
Martino Facchin
5f44b23ca8 Publish core 1.6.19 2018-07-04 12:06:10 +02:00
agdl
b45714977d Add MKR WiFi1010 variant and bootloader
* Update variant for hardware changes

- Use sercom2 for SPI1
- Remove Serial2
- update various comments
- disable NINA on start

* Add Serial2 (overlaps with SPI1)

This commit squashes all the dev commits from @agdl, @sandeepmistry and @facchinm
2018-07-04 12:03:43 +02:00
Martino Facchin
d72f11735d
Merge pull request #265 from facchinm/burn_bootloader_org_boards
Fix bootloader tools for .org boards
2018-05-21 15:07:32 +02:00
Martino Facchin
b1999de02c
Merge pull request #270 from tbowmo/fix_mzero
Copied pin defs for D6, D7 and D13 from zero to mzero
2018-05-10 10:38:54 +02:00
Grzegorz Gajoch
2facbf6177 Fix interrupt mask to block in SPI library 2018-03-20 11:07:43 -04:00
Sandeep Mistry
bdf06085de Specify the ARM GCC version in platform.txt 2018-03-12 16:27:46 -04:00
Sandeep Mistry
b1085de189 Version 1.6.18 2018-03-05 08:43:29 -05:00
Sandeep Mistry
33c6dfa8a4 Update changelog 2018-03-05 08:42:21 -05:00
gdsports
95bcb7cf3a Fix CDC_ENABLED
Undefining CDC_ENABLED triggered a compiler error. With this fix, the
CDC ACM configuration can be disabled.
2018-02-20 16:49:11 -05:00
Sandeep Mistry
69fcf8db46 Make ring buffer head and tail indexes volatile 2018-02-14 12:39:57 -05:00
gdsports
ca17d6204f Fix configuration descriptor length
A 16 bit length was being stored in a 32 bit int without initializing the most significant 16 bits.
2018-02-01 16:47:10 +01:00
José Ángel Jiménez
4294d36b89 Fix calculation of SPI_MIN_CLOCK_DIVIDER in SPI.h
The previous version of SPI.h works only for the SAMD21G18A variant and only for a 48 MHz system clock. For the rest of variants, it sets SPI_MIN_CLOCK_DIVIDER to 2, which is incorrect for a 48 MHz system clock.

The SAMD21 datasheet specifies a typical SPI SCK period (tSCK) of 42 ns, see "Table 36-48. SPI Timing Characteristics and Requirements", which translates into a maximum SPI clock of 23.8 MHz.

The new code conservatively sets the divider for a 12 MHz maximum SPI clock, taking into account any value for the system clock (not only 48 MHz). It also executes for other variants of the SAMD, not only SAMD21G18A.

Can you, please, review this patch?
2018-01-31 16:50:12 +01:00
Sandeep Mistry
e00bcb2be8 Update changelog 2018-01-25 11:42:55 -05:00
Sandeep Mistry
b753095e56 Correct I2C frequency calculation formula
Allow variant to override the default rise time in nanoseconds via
define
2018-01-25 11:31:04 -05:00
Sandeep Mistry
a7c33fea4b UART: manually handle IRQ if DRE + interrupts disabled or in higher priority ISR
When write is called and TX buffer is full.
2018-01-25 11:27:16 -05:00
Mitchell Pontague
ee913a0828 samd21e sercom compatibility (#280)
Make sercom4 and sercom5 optional to allow compilation of samd21e variants.
2018-01-25 11:25:58 -05:00
Martino Facchin
2bb54068a2 Don't reallocate USB buffers if already allocated
USB Configuration was meant to run only once, but if the board comes back from standby the host can reconfigure the device again.
Probably a cleaner patch could be free()-ing the buffers on standby() to release the memory but at least we don't leak anymore.

Fixes https://github.com/arduino/ArduinoCore-samd/issues/293
2018-01-25 11:20:41 -05:00
Martino Facchin
395695b000 Increase Wire TX and RX buffer size to 256 2018-01-25 10:48:26 -05:00
Martino Facchin
503a9b3954 Make RingBuffer class template-based
This commit prepares to enlarge the ringbuffer for specific needs (at compile time).
Also, it fixes a spurious include in delay.h
2018-01-25 10:48:26 -05:00
Sandeep Mistry
d58b840f63 Add missing USBCON wrapper 2018-01-08 10:41:14 -05:00
Sandeep Mistry
78f79ed2c0 Add SPI.notUsingInterrupt(...) 2018-01-02 11:57:40 -05:00
agdl
8f5e2eb58c Changed boradcast variable to enableGeneralCall 2017-12-15 09:06:48 -05:00
agdl
6a1295459b Allow General Calls on I2C bus (aka brodcast) 2017-12-15 09:06:48 -05:00
agdl
3cb328a8c4 Added missing SerialGSM keyword 2017-12-12 07:10:20 -05:00
Kees Bakker
fd15a1c603 Avoid read-modify-write when enabling SERCOM DRE interrupt 2017-12-11 08:55:04 -05:00
Sandeep Mistry
f871dd560b Rebuild bootloaders with updated USB product strings 2017-11-30 10:15:41 -05:00
Sandeep Mistry
6306c5db0a Make some USB product strings consistent 2017-11-30 10:10:57 -05:00
Sandeep Mistry
1c43b63087 SDU: Add MKR GSM 1400 and WAN 1300 support and rebuild 2017-11-29 12:34:32 -05:00
Cristian Maglie
3f581abea0 Releasing 1.6.17 2017-11-29 16:38:27 +01:00
Cristian Maglie
5a4d8c7bc2 Merge remote-tracking branch 'arduino/master' into HEAD 2017-11-29 16:35:40 +01:00
Sandeep Mistry
637be817e1 Update changelog 2017-11-29 10:15:08 -05:00
Cristian Maglie
07a7b00407 Updated windows drivers for MKR GSM and MKR WAN 2017-11-29 15:26:08 +01:00
Martino Facchin
018e0c4bb6 Rename MKRLORA1300 to MKRWAN1300 2017-11-29 15:27:34 +01:00
Martino Facchin
40cc8c0fc1 [MKRWAN] Enable second optional SPI for dumb mode 2017-11-29 15:26:32 +01:00
Cristian Maglie
592547173d Fixed board names case 2017-11-29 15:26:28 +01:00
Martino Facchin
8828166068 Initial porting of MKRLoRa1300 2017-11-29 15:21:33 +01:00
Cristian Maglie
9d0152ba16 Fixed board names for MKR GSM and MKR FOX 2017-11-29 13:49:54 +01:00
Sandeep Mistry
da28678b09 set GSM DTR to LOW on start 2017-11-29 13:49:54 +01:00
Sandeep Mistry
a82c42e40b put GSM modem in reset on start to conserve power if it's not used 2017-11-29 13:49:54 +01:00
Sandeep Mistry
324fb8b7ce Remove RTS work around 2017-11-29 13:49:54 +01:00
Sandeep Mistry
391fc805d8 Rename disable_battery_charging to disable_battery_fet and always call, update comment 2017-11-29 13:49:54 +01:00
Sandeep Mistry
21ccbc9c40 Lower ADC threshold to 600 (was 800) 2017-11-29 13:49:54 +01:00
agdl
840e73fb50 Dissable FET if battery is not found at startup 2017-11-29 13:49:54 +01:00
agdl
a91df58c65 Fixed ADC battery discharge
INPUT_PULDOWN was not suitable to completely discharge the input capacitor on ADC_BATTERY.
Switching to OUTPUT, LOW discharge it faster then try to read
2017-11-29 13:49:54 +01:00
agdl
6d08567155 Added DTR pin HW 2.0 2017-11-29 13:49:54 +01:00
Sandeep Mistry
2e2e2ed0de Rebuild MKRGSM bootloader 2017-11-29 13:49:54 +01:00
Sandeep Mistry
fff04ace3a Bump input current limit to 2A 2017-11-29 13:49:54 +01:00
Sandeep Mistry
c469f26f97 initVariant enables battery charging if voltage is over threshold
The bootloader side will disable charging on boot by default.
2017-11-29 13:49:54 +01:00
Sandeep Mistry
54f0d5a41f [MKRGSM1400] set RTS and CTS pins for Serial2/SerialGSM 2017-11-29 13:49:54 +01:00
Sandeep Mistry
04ebeee38d Use RTS and CTS inside MODEM 2017-11-29 13:49:54 +01:00
Sandeep Mistry
e1dddd9543 Hold reset high to prevent cellular modem from starting if not used 2017-11-29 13:49:54 +01:00
Sandeep Mistry
3d82fa444d Reset modem via pin the in library instead of variant, use pin constants 2017-11-29 13:49:54 +01:00
Sandeep Mistry
2f0b5b06d7 Remove 16k bootloader support 2017-11-29 13:49:54 +01:00
Sandeep Mistry
96c15fbf7c Rebuild MKRGSM bootloader 2017-11-29 13:49:54 +01:00
Sandeep Mistry
43c254be32 Split PMIC and I2C functionality in boot loader to separate files 2017-11-29 13:49:54 +01:00
Sandeep Mistry
ec356b8bf2 Rebuild MKRGSM bootloader 2017-11-29 13:49:54 +01:00
Sandeep Mistry
778c7a8974 Disable charging in the bootloader 2017-11-29 13:49:54 +01:00
Martino Facchin
a65838b445 remove pmic defaults from initVariant() 2017-11-29 13:49:54 +01:00
Martino Facchin
c933a7d10c add precompiled bootloader 2017-11-29 13:49:54 +01:00
Martino Facchin
f71137ed2c Remove useless include 2017-11-29 13:49:54 +01:00
Martino Facchin
84377209dd Port Wire to bootloader 2017-11-29 13:49:54 +01:00
Martino Facchin
fcc273d3a0 Bootloader fits cleanly 8KB limit 2017-11-29 13:49:54 +01:00
Martino Facchin
d36587e4b3 Fix exploded binary size 2017-11-29 13:49:54 +01:00
Martino Facchin
5ce5e43ccf Inital effort to configure PMIC in bootloader
it doesn't fit 8KB, use 16KB bootloader -> need to change openocd and sketch linker script
2017-11-29 13:49:54 +01:00
Martino Facchin
a00bd84cad Modify ICHARGE only if a battery is connected 2017-11-29 13:49:54 +01:00
Martino Facchin
f9c8150b2f TEST: disable battery charging if no battery is connected at startup
This helps removing the flicker, but if the battery is connected AFTER connecting the USB it will be unavailable.
A complete power cycle needs to be performed to recover charging/battery functionality.
2017-11-29 13:49:54 +01:00
Martino Facchin
9a80642a3f Fix a couple of problems with UART
HW flow control is still not working, probably some low lovel work is needed.
2017-11-29 13:49:54 +01:00
Martino Facchin
628ee7d771 Fix PMIC behaviour by borrowing Electron library
PMIC initialization is now handled by the GSM init() if the selected board is suitable. The only hadcoded PMIC initialization is 500mA maximum charge current.
2017-11-29 13:49:54 +01:00
Martino Facchin
e944484b37 Compile MKRGSM1400 bootloader 2017-11-29 13:49:54 +01:00
Martino Facchin
926459db29 Add integration defines for TinyGSM fork 2017-11-29 13:49:54 +01:00
Martino Facchin
203dfcc1fb Rewrite PMIC initialization using Sercom (no error checking) 2017-11-29 13:49:54 +01:00
Martino Facchin
70eff4b834 Initial porting of MKRGSM1400
PMIC handling needs to be decided; if we use the SDU method we could have troubles.
Probably the best way is using sercoms directly.
Anyway, the defaults SHOULD be almost ok (except the maximun charging current)
2017-11-29 13:49:54 +01:00
Sandeep Mistry
af14b97ee2 Use port manipulation instead of SERCOM h/w for UART RTS 2017-11-29 13:49:13 +01:00
Sandeep Mistry
c26a21f748 Make UART RTS + CTS configurable in constructor only 2017-11-29 13:49:13 +01:00
Sandeep Mistry
7fc402f3b5 Leverage SERCOM h/w functionality for RTS and CTS 2017-11-29 13:49:13 +01:00
Sandeep Mistry
bd1bd60815 Add optional RTS + CTS support to UART 2017-11-29 13:49:13 +01:00
Martino Facchin
e6df241061
Merge pull request #273 from awatterott/master
No fixed value for USB power current
2017-11-13 10:51:32 +01:00
Andreas Watterott
7e37bb3b12
No fixed value for USB power current. 2017-11-09 19:50:41 +01:00
Thomas Mørch
2de3cd4b36 Copied pin defs for D6, D7 and D13 from zero to mzero 2017-10-19 14:58:45 +02:00
Martino Facchin
faef0131cd Fix bootloader tools for .org boards 2017-10-11 16:19:22 +02:00
Cristian Maglie
f2ac24f156 update changelog 2017-09-14 10:56:03 +02:00
Cristian Maglie
812d3e90cc Put interrupt mask instead of interrupt num in ISR callbacks list
This should save some cycles inside ISR Handler.
2017-09-08 17:00:17 +02:00
Cristian Maglie
9d9fe5c097 Slightly clearer formula for interrupt config register position 2017-09-08 16:55:33 +02:00
Cristian Maglie
1330914898 Some code makeup 2017-09-08 16:05:40 +02:00
Cristian Maglie
02d8bf82a2 Fixed allocation/deallocation of interrupts subroutines 2017-09-08 15:37:29 +02:00
Cristian Maglie
d2b717871b interrupts: remove unneeded cleanup 2017-09-08 11:35:02 +02:00
joverbee
9a49ce2fc4 Improve interrupt handling response time
Change the way ISRs are stored. Store now in a list on a ‘first come
first served basis’, the first interrupt that gets attached will be
served first. This improves the speed of the ISR calling from about 6us
to 2us for a single interrupt on extint14

See #200
2017-09-05 14:12:10 +02:00
Cristian Maglie
610c0e288d Update changelog 2017-09-04 16:54:51 +02:00
joverbee
a9fa694eb7 Reset sense bits before or-writing the new sense signature
Solve #199
2017-09-04 16:51:36 +02:00
Cristian Maglie
af0263a60a More accurate approximation for multiplication factor of PLL to make 48Mhz.
Fix #223
2017-09-01 21:35:15 +02:00
Cristian Maglie
e6868b24ec Released 1.6.16 2017-08-23 19:55:20 +02:00
Cristian Maglie
973b99f927 Updates to CHANGELOG 2017-08-23 19:31:30 +02:00
Sandeep Mistry
ee7db6a39c Change return value of I2S:: availableForWrite to match new Print API 2017-08-23 19:22:11 +02:00
Cristian Maglie
3d51b54386 Some updates on Stream and Print class. 2017-08-23 19:22:11 +02:00
Sandeep Mistry
0ee62489c0 Replace utoa + toupper with custom loop 2017-08-23 19:21:01 +02:00
Sandeep Mistry
61b060c732 Slim serial number to hex string conversion 2017-08-23 19:21:01 +02:00
Sandeep Mistry
9370464ad0 Use SAMD21 serial number for USB serial number prefix 2017-08-23 19:21:01 +02:00
Victor Nakoryakov
4ffc9d2bdb fix for pgm_read_ptr macro 2017-08-23 17:10:30 +02:00
Cristian Maglie
de285ca495 fixed typo in changelog 2017-07-12 11:36:19 +02:00
Cristian Maglie
be235dc195 update changelog 2017-07-11 17:46:16 +02:00
Cristian Maglie
33709782bd Merge branch 'buffer-serial-tx' 2017-07-11 16:28:04 +02:00
Cristian Maglie
08de7f176c Fix prototypes to strictly match Arduino API
See https://github.com/arduino/Arduino/issues/4525
2017-07-11 16:00:11 +02:00
ladyada
806de1241a match variant to shipping rev G hardware 2017-07-11 15:59:31 +02:00
ladyada
06ae2087ce fix for crystal-less startup stability 2017-07-11 15:59:31 +02:00
Cristian Maglie
b50f475939 update changelog 2017-07-11 15:51:12 +02:00
Adminius
74a12d0f25 changes PWM resolution to 16bit for all timers
PWM frequency 732 Hz
2017-07-11 15:45:38 +02:00
Sandeep Mistry
b849525921 Add error if I2S is not supported by the variant 2017-07-11 15:31:12 +02:00
Eugen
cfbb6121a5 Allows PWM on Pin7 (Issue #178) 2017-07-11 15:28:59 +02:00
Sandeep Mistry
46653a61e1 Change IRQ handler to check if data is available before check for DRE 2017-07-11 12:58:15 +02:00
Sandeep Mistry
610d4a8b8b Also check if TX buffer is empty before writing to data to UART reg directly 2017-07-11 12:58:15 +02:00
Sandeep Mistry
12b3774c3f Use reg instead of bit to enable/disable the DRE interrupt
The RXC interrupt was being disabled when using bit to disable the DRE
interrupt.
2017-07-11 12:58:15 +02:00
Sandeep Mistry
aa400fd434 Update flush to also wait for TX buffer to empty 2017-07-11 12:58:15 +02:00
Sandeep Mistry
158df98d0c Correct disableDataRegisterEmptyInterruptUART to use INTENCLR instead of INTENSET 2017-07-11 12:58:15 +02:00
Sandeep Mistry
b24c9e5b68 TX buffering for UART using RingBuffer 2017-07-11 12:58:12 +02:00
Sandeep Mistry
57c432e688 Add enable and disable data register interrupt APIs for UART 2017-07-11 12:51:58 +02:00
Sandeep Mistry
38992c2a9e Add availableForStore method to RingBuffer 2017-07-11 12:51:58 +02:00
per1234
a32ac8cdb9 Update comments to reflect Stream functions changed from private to protected
These functions were changed from private to protected but the comments were not updated at that time.

In conjunction with equivalent pull requests to Arduino AVR Boards and Arduino SAM Boards, solves #6146.
2017-07-07 10:12:25 +02:00
Martino Facchin
48f2f987a4 Merge pull request #242 from per1234/keywords
Add platform specific keywords.txt
2017-07-04 08:18:58 +02:00
per1234
e7f58b979b Add platform specific keywords.txt
Since 3f1b23bf61 this will cause keywords in this file to be highlighted only when a board from this platform is selected.

Currently only contains INPUT_PULLDOWN. Style copied from the INPUT_PULLUP entry at https://github.com/arduino/Arduino/blob/1.8.3/build/shared/lib/keywords.txt#L11.

I don't know whether there are other platform specific keywords for Arduino SAMD Boards. I'm happy to add any others on request.

Closes https://github.com/arduino/Arduino/issues/3534
2017-07-03 10:50:18 -07:00
Sandeep Mistry
31e121bc86 Update changelog 2017-05-02 10:05:41 -04:00
Sandeep Mistry
70b011b077 USB: Only swap incoming buffers for non-ZLP's 2017-05-02 10:01:03 -04:00
Cristian Maglie
0cbc68f119 Remove /A flag from post-install
The flag means "install everything or nothing", not really useful
in our case.
2017-04-28 11:59:10 +02:00
Cristian Maglie
761d6168d1 Releasing 1.6.15 2017-04-27 20:04:12 +02:00
Cristian Maglie
385f1255da Fixed driver for MKRFox1200 2017-04-27 17:01:26 +02:00
Cristian Maglie
6d21cb9d78 Added driver for MKRFox1200 2017-04-27 16:01:52 +02:00
634 changed files with 52128 additions and 6799 deletions

95
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View file

@ -0,0 +1,95 @@
name: Bug Report
description: Report a problem
labels: 'Bug'
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
It's okay to leave some blank if it doesn't apply to your problem.
- type: dropdown
attributes:
label: Operating System
options:
- Linux
- MacOS
- RaspberryPi OS
- Windows 7
- Windows 10
- Windows 11
- Others
validations:
required: true
- type: input
attributes:
label: Arduino IDE version
placeholder: e.g Arduino 1.8.15
validations:
required: true
- type: input
attributes:
label: Board
placeholder: e.g Metro M4 Express
validations:
required: true
- type: input
attributes:
label: ArduinoCore version
description: Can be found under "Board Manager" menu
validations:
required: true
- type: textarea
attributes:
label: Sketch as ATTACHED TXT
placeholder: |
e.g examples/MassStorage/msc_ramdisk.
If it is custom sketch, please provide it as **ATTACHED** files or link to it.
Pasting raw long code that hurts readability can get your issue **closed**
validations:
required: true
- type: textarea
attributes:
label: Compiled Log as ATTACHED TXT
placeholder: |
Compiled log from Arduino IDE as **ATTACHED** txt.
Pasting raw long log that hurts readability can get your issue **closed**
validations:
required: true
- type: textarea
attributes:
label: What happened ?
placeholder: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
attributes:
label: How to reproduce ?
placeholder: |
1. Go to '...'
2. Click on '....'
3. See error
validations:
required: true
- type: textarea
attributes:
label: Debug Log as ATTACHED TXT
placeholder: |
Debug log where the issue occurred as attached txt file, best with comments to explain the actual events.
validations:
required: false
- type: textarea
attributes:
label: Screenshots
description: If applicable, add screenshots to help explain your problem.
validations:
required: false

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Adafruit Support Forum
url: https://forums.adafruit.com
about: If you have other questions or need help, post it here.

View file

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: Feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

61
.github/workflows/githubci.yml vendored Normal file
View file

@ -0,0 +1,61 @@
name: Build
on: [pull_request, push]
jobs:
build:
strategy:
fail-fast: false
matrix:
board:
# Alphabetical order
- 'circuitplayground_m0'
- 'feather_m4_can'
- 'hallowing'
- 'hallowing_m4'
- 'metro_m0'
- 'metro_m4'
- 'pybadge_m4'
- 'pygamer_m4'
- 'pyportal_m4'
- 'pyportal_m4_titano'
# with TinyUSB
- 'metro_m0:usbstack=tinyusb'
- 'metro_m4:speed=120,usbstack=tinyusb'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'true'
- name: Install Arduino CLI and Tools
run: |
# make all our directories we need for files and libraries
mkdir $HOME/.arduino15
mkdir $HOME/.arduino15/packages
mkdir $HOME/Arduino
mkdir $HOME/Arduino/libraries
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
- name: Install BSP and Libraries
env:
BSP_URL: https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
BSP_PATH: .arduino15/packages/adafruit/hardware/samd
run: |
arduino-cli config init
arduino-cli core update-index
arduino-cli core update-index --additional-urls $BSP_URL
arduino-cli core install arduino:samd --additional-urls $BSP_URL
arduino-cli core install adafruit:samd --additional-urls $BSP_URL
# Replace release BSP with our code
BSP_VERSION=`eval ls $HOME/$BSP_PATH`
rm -r $HOME/$BSP_PATH/*
ln -s $GITHUB_WORKSPACE $HOME/$BSP_PATH/$BSP_VERSION
arduino-cli lib install "Adafruit NeoPixel" "Adafruit seesaw Library" "Adafruit SPIFlash" "FlashStorage" "MIDI Library" "SD" "SdFat - Adafruit Fork"
- name: Build examples
run: python3 tools/build_all.py ${{ matrix.board }}

1
.gitignore vendored
View file

@ -3,3 +3,4 @@
bootloaders/*/build/
*~
/libraries/**/build/

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "libraries/Adafruit_TinyUSB_Arduino"]
path = libraries/Adafruit_TinyUSB_Arduino
url = https://github.com/adafruit/Adafruit_TinyUSB_Arduino.git
[submodule "libraries/Adafruit_ZeroDMA"]
path = libraries/Adafruit_ZeroDMA
url = https://github.com/adafruit/Adafruit_ZeroDMA

View file

@ -1,3 +1,83 @@
SAMD CORE ?.?.?? ????.??.??
SAMD CORE 1.6.21 2019.04.01
* MKR boards: changed I2C to sercom2, SPI1 + Serial2 to sercom4
* Improved accuracy of delay() function. Thanks @BenF
* MKR 1500: Changed SARA module to be powered off on boot
SAMD CORE 1.6.20 2018.11.28
* Replaced boolean type with bool in examples. Thanks @per1234
* Added c++ linker command to allow to include libstdc++ when linking. Thanks @helmut64
* CPX driver fixes. Thanks @dhalbert
* I2S: Changed library to use 8 MHz oscillator source if 48MHz divider does not fit in 8 bits
* UART: Added frame error handling
* USB: Fixed memory leak on reconnects
* SDU: Added support for Arduino M0. Thanks @jandrassy
* Added arduinoOTA upload keys for Arduino M0. Thanks @jandrassy
* USB: Fixed USB Host failures and fixed memory overwrite in USBHost. Thanks @gdsports
* USB: Added method to return USB error code. Thanks @MarkFischer
* CDC: Clear line state on end()
* USB: Added USB device end() method
* Removed requirement that the DAC is on A0. Thanks @GabrielNotman
* Added alternate ports 44, 45 to make the SWCLK and SWDIO pins available on the Zero. Thanks @helmut64
* Added defines for MKR pin layout
* Fixed freeze in tone()
* Added MKR NB 1500 variant and bootloader
* Increased the default serial buffer size to 256
SAMD CORE 1.6.19 2018.07.11
* Fixed bootloader tools for .org boards
* M0: Updated pin definitions for D6, D7 and D13 to match Zero
* SPI: Fixed interrupt mask to block. Thanks @ggajoch
* Added MKR WiFi 1010 variant and bootloader
* Updated Windows Drivers to 1.4.0 and re-signed Adafruit_Circuit_Playground_Express.inf
SAMD CORE 1.6.18 2018.03.05
* Wire: Added support for general call (broadcast)
* SPI: Added SPI.notUsingInterrupt(...) API
* Fixed build errors if variant disabled USB
* Wire: TX and RX buffers are now 256 bytes (previously was 64 bytes)
* Added samd21e sercom compatibility. Thanks @mitchellpontague
* Fixed lock ups when outputting to UART during ISR
* Wire: correct I2C frequency calculations, and allow variant to overide default pull up resistor rise time
* USB: Fixed build errors when CDC_ENABLED was not set. Thanks @gdsports
SAMD CORE 1.6.17 2017.11.29
* More accurate approximation for multiplication factor of PLL to make 48Mhz. Thanks @joverbee
* Fix changing trigger mode (RISING/FALLING/...) in attachInterrupt(..) during runtime. Thanks @joverbee
* Improved ISR response time. Thanks @joverbee
* USB power current can now be overridden in the variant. Thanks @awatterott
* UART's now support optional RTS and CTS pins defined in the variant.
* Added support for MKR GSM 1400 and MKR WAN 1300
SAMD CORE 1.6.16 2017.08.23
* Is now possible to use PWM on D7 (though it can't be used with PWM on D12 at the same time). Thanks @Adminius
* PWMs now can perform real 16-bit resolution if analogWriteResolution(16) is set. Thanks @Adminius
* USB CDC: fixed issue of available() getting stuck when receiving ZLP's
* Serial (UART) tx is now buffered.
* Improved CRYSTALLESS stability. Thanks @tannewt
* Some fixes to Adafruit Circuit Playground Express variant. Thanks @ladyada
* Updated Stream and Print class
* Native USB now supports USB Serial Number
* Fixed pgm_read_ptr compatibility macro. Thanks @nkrkv
SAMD CORE 1.6.15 2017.04.27
* Added missing Windows driver for MKRFox1200
* Added SDU support for MKRFox1200
SAMD CORE 1.6.14 2017.04.04
* Fixed platform definition for openocd
* Added bootloader definitions for MKRFox1200
* Added lowpower function on USB subsystem
SAMD CORE 1.6.13 2017.03.31
* Added SDU (SD card Updater) library.

View file

@ -1,43 +1,14 @@
# Arduino Core for SAMD21 and SAMD51 CPU
[![Build Status](https://github.com/adafruit/ArduinoCore-samd/workflows/Build/badge.svg)](https://github.com/adafruit/ArduinoCore-samd/actions)
This repository contains the source code and configuration files of the Arduino Core
for Atmel's SAMD21 and SAMD51 processor (used on the Arduino/Genuino Zero, MKR1000 and MKRZero boards).
In particular, this adds support for the Adafruit SAMD Boards such as the Feather M0
## ATSAMD51 Installation on Arduino IDE
The ATSAMD51 is a significantly new chip, so this is a detailed process for now! For the SAMD21, please install via the board manager (no extra steps required)
1. Install Arduino IDE 1.8.5 or greater
2. Install/update the Adafruit SAMD board support package if you have installed it
3. Now we need to update CMSIS! Download https://github.com/adafruit/ArduinoModule-CMSIS-Atmel/archive/master.zip and unzip
4. Find your Arduino CMSIS, in Mac its "~/Library/Arduino15/packages/arduino/tools/CMSIS-Atmel/1.1.0/CMSIS" version # may vary, you'll need "Go to folder..." feature in the Finder to get to " ~/Library/Arduino15" as it is hidden. In Windows it is "C:\Users\yourusername\AppData\Local\Arduino15\packages\arduino\tools\CMSIS-Atmel\1.1.0\CMSIS" Inside is a folder named Device
For Linux: the Arduino stuff is located in ~/.arduino15/packages/arduino/tools/CMSIS-Atmel/1.1.0/CMSIS
5. Inside the downloaded CMSIS zip, go into the CMSIS-Atmel/CMSIS folder, you should see a folder named Device. *DRAG THE DEVICE FOLDER ONLY* from the zip to your arduino Library folder so that Device is merged with Device. It will replace a bunch of files.
For Linux, it may be better to just delete the original Device Folder then copy over the new one - the drag/drop worked ok on MACOS, but not so well on my Linux box.
6. You will also need to replace bossac. For Windows or Mac: Go here https://github.com/adafruit/BOSSA/releases and download either windows exe or mac app of latest bossac. unzip. Go to Step 12.
For Linux users it is best to build a copy of bossac locally -
clone the Adafruit Repostitory to somewhere on your local machine.
```
git clone https://github.com/adafruit/BOSSA.git
change to the arduino branch
git checkout arduino
```
Follow the instructions to build bossac in README.md or at https://github.com/adafruit/BOSSA/tree/arduino.
7. Replace the binary at ".../Library/Arduino15/packages/arduino/tools/bossac/1.7.0/bossac" or "...\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.7.0\bossac"
8. On Windows 7 you will also need to install the updated serial driver, download https://github.com/adafruit/Adafruit_Windows_Drivers/archive/master.zip to get all the drivers, and point the Device Manager to the unzipped folder. It isn't signed, so just approve the installation manually.
13. That's it!
## Bugs or Issues
## Known Issues for SAMD51:
* AREF must be tied to 3.3V for dac to work. This is a bug in the SAMD51 silicon.
* USB host mode doesn't work yet

2372
boards.txt

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,457 @@
:10000000FCFF022055060000390600003D060000F6
:1000100041060000450600004906000000000000FF
:100020000000000000000000000000004D0600007D
:10003000000000000000000051060000E50700007D
:1000400010B5054C237833B9044B13B10448AFF312
:1000500000800123237010BD5C0000200000000020
:10006000041C000008B5064B1BB106480649AFF357
:1000700000800648036813B1054B03B1984708BDDB
:1000800000000000041C0000600000205800002058
:10009000000000001A4B1B7813F0FF0F0AD1194B18
:1000A0001A78194909780A44D2B21A704FF400122A
:1000B000164BDA61124B1A780132D2B21A70114B18
:1000C0001B78DBB2F02B04D80E4B1B78DBB2092B6C
:1000D0000AD80D4B1A785242D2B21A70094A1178D6
:1000E0001B780B44DBB21370054B1A78054B1B7859
:1000F000D2B29A4203D14FF40012044BDA61704736
:100100007800002001000020000000200080004155
:1001100010B4C36913F0020FFBD104686FF34104FC
:100120000460C36913F0010FFBD1046844F00104BB
:100130000460036813F0010FFBD1C36913F0010FD2
:10014000FBD1C36913F0020FF7D142F0804343F0B3
:1001500004030360C36913F0040FFBD14FF4403371
:1001600043608181C36913F0020FFBD1036843F040
:10017000020303605DF8044B704700BF037E13F079
:10018000010FFBD081627047037E13F0040FFBD098
:10019000438B13F0010F07D1438B13F0020F03D1F0
:1001A000438B13F0040F02D00122024B1A70806AB5
:1001B000C0B270477900002070B5044603689A8B7E
:1001C00002F0080292B232B308259D8380229A720F
:1001D000112183F80011402183F8051183F80421CF
:1001E000114A5068032666F31E705060506966F32A
:1001F0001E7050610D4810600D481061506865F325
:100200009B30506050686FF30D00506083F804110C
:100210000023237106E093F8073113F0100F01D08B
:1002200000F022FB207970BD940100209400002092
:10023000140100200160002303714371054B8360AA
:100240000B7843F002030B700268937813F0020FEF
:10025000FBD17047B901000008B5444A936943F0E7
:1002600001039361424B93F8581041F0010183F868
:10027000581093F83C1001F0F00183F83C1093F80B
:100280003C1041F0070183F83C1093F8591041F0FD
:10029000010183F8591093F83C1001F00F0183F825
:1002A0003C1093F83C1041F0700183F83C10402161
:1002B000304BC3F8A810936943F00103936102F532
:1002C000A052536813F0040FFBD14FF082431A7809
:1002D00042F001021A701A46937813F0010FFBD115
:1002E000254B1968C1F34412C1F3822311F01F0199
:1002F00003D01F2908BF092100E009211AB11F2AD4
:1003000008BF192200E019221BB1072B08BF0623E2
:1003100000E0062302F01F0242EA81111B0303F4EE
:10032000E04319434FF082431985DA7842F0030223
:10033000DA70DA7842F00C02DA701A786FF3C712CA
:100340001A701A7842F004021A700C4858621A891E
:100350006FF383021A811A8922F001021204120C2F
:100360001A810021802201F0C6FA08BD0008004071
:1003700000800041001C00408400800094010020A7
:100380002DE9F041064615461C461F46214B03EB5E
:10039000441310335B68C3F302730333012202FA80
:1003A00003F3AB4207D81B4A02EB4412536943F0F4
:1003B000004353610CE014F1000818BF4FF001082E
:1003C000154B03EB881840462A4601F08BFA41464C
:1003D000104A02EB441202F110031161526965F3F5
:1003E0000D025A605A686FF39B325A60083406EB6C
:1003F00044140223E371637943F08003637107F1CE
:10040000080106EB4111CB7913F0020FFBD028460F
:10041000BDE8F081940100201401002038B50546A4
:1004200014461B4B1B7813F0FF0F13D1194B1A4ABC
:100430001A645A6C6FF30D025A645A6C6FF39B3254
:100440005A6490F8443143F0400380F8443101226B
:100450000F4B1A7095F8473113F0010F15D00D4B63
:100460005B6CC3F30D03A34203D20A4B5C6CC4F371
:100470000D0408460849224601F034FA012385F8A4
:1004800047310022024B1A7000E00024204638BD9C
:100490007A00002094010020D400002031B190F8AF
:1004A000053143F0200380F80531704790F805319D
:1004B00043F0100380F80531704700BF094B5A69BB
:1004C0006FF30D025A61022380F8073190F805316D
:1004D00043F0800380F8053190F8073113F0020FE4
:1004E000FAD070479401002061F07F01C9B2817297
:1004F000704700BF10B4032280F84021104B596CA4
:1005000062F31E715964402180F845110D4C1C6442
:10051000302480F820415C6B62F31E745C6380229F
:1005200080F82421084C1C6380F86011596F6FF328
:100530001E71596780F864215DF8044B704700BF55
:1005400094010020D400002054010020344B1A886C
:1005500092B21A8042F20E02324B9A821A46D36845
:1005600013F0010FFBD02F4B1A7C6FF302021A74A9
:1005700003F500631A7842F001021A701A465368B4
:1005800013F0010FFBD140F20512274BDA621A4635
:10059000536813F0200FFBD14FF48272224B1A6282
:1005A000A3F5406300221A77204A9A621A4692F80D
:1005B0002C3013F0100FFAD100221D4B83F82020AD
:1005C0001A4692F82C3013F0040FFAD1184B1A7F08
:1005D00042F002021A771A4692F82C3013F0020FFA
:1005E000FAD1134B5A6A5A621A4692F82C3013F019
:1005F000080FFAD198220E4B83F820201A4613696F
:1006000013F4807FFBD040F60632074B1A621A467D
:10061000536813F0040FFBD10122064B5A71704747
:100620000040004100140040001C00400000010494
:1006300000100040000800400EBEFEE70DBEFEE7C1
:100640000DBEFEE70DBEFEE70DBEFEE705BEFEE7F2
:1006500002BEFEE710B5174B174A9A4215D0134653
:10066000164A9A4211D0134B134A9A420DD2131DC7
:10067000134CE41A24F003040434002310460F49F9
:100680005A581A500433A342FAD10E4B0E4A9A42DA
:100690000CD00BD2131D0D49C91A21F003011944C6
:1006A000043B002243F8042B8B42FBD100F010F8EE
:1006B000FEE700BF5C00002000000020081C0000D6
:1006C0005F000020A40300205C000020A70300209E
:1006D00070B5394B1B68B3F1FF3F2DD0374A384B0B
:1006E0001A60043A12F07F0F26D1364B1B7813F0B4
:1006F000010F03D00021344B196011E0324B19680F
:10070000324B994203D100222F4B1A6014E02F493B
:100710002D4B19602E4B013BFDD100212A4B196056
:10072000254B1B6883F3088822F07F02294B9A60CF
:10073000234B1B681B681847FFF708FF62B600F0E1
:10074000D1FE00F055F80546234B4FF400129A6095
:100750004022C3F88820C3F898204FF000629A60C6
:100760009A611E4B40F2E7325A60C021194A82F862
:10077000231000229A6007221A60194C0126AB68E8
:100780002846984700B12670237813F0FF0F05D054
:10079000002000F02DFB00F0C5FBFCE7237813F0F0
:1007A000FF0FECD100F016FF0028E8D0012000F088
:1007B0001FFB00F0B7FBFCE7004000000440000016
:1007C00014020020000C0040FCFF0220EF6916F02C
:1007D000808D5B0000ED00E00080004110E000E053
:1007E0007B00002008B5FFF755FC00F077FB08BD43
:1007F00010B5064C4FF082432360FFF72DFD2046D5
:100800002168FFF717FD204610BD00BF1802002029
:10081000F0B5C1B007460E461546084601F073F81C
:100820004000831C8DF8003003238DF801303378AD
:1008300073B16D08012D0DDD6C463146012224F89F
:10084000023F013211F8013F2BB1AA42F7DB02E06F
:10085000012200E001223846694652000023FFF7DA
:100860008FFD41B0F0BD00BFF0B583B0064604680F
:10087000102384F80731A04B1A78A04D2A705A78BB
:100880009F490A7098789F4A1080108880B2DF785C
:1008900040EA0720108018799B4A1080108880B2A7
:1008A0005F7940EA072010809879984A1080108874
:1008B00080B2DB7940EA03231380402384F80431BB
:1008C0000A782B7843EA022340F20232934200F086
:1008D0002D811EDCB3F5807F00F0598109DC812B6E
:1008E00000F0C880822B00F0CD80802B40F0F0819A
:1008F000B8E0B3F5817F00F05381C0F24D81B3F5CC
:10090000407F00F0EF8040F20132934200F0EF8030
:10091000DEE1B3F5106F00F093800BDCB3F5D06F20
:100920001FD0B3F5086F00F09580B3F5A06F40F0CD
:10093000CF817BE042F22102934200F0AF8105DCDF
:1009400040F60132934200F02281C1E142F2A1124D
:10095000934200F0A78142F22122934200F0B1813C
:10096000B6E1684B1B88C3F30723012B0ED1306817
:10097000664B1B889BB2122B9DBF644B1A8892B2A8
:10098000122263490023FFF7FBFCA5E15D4B1B88A6
:10099000C3F30723022B0ED130685C4B1B889BB23C
:1009A000432B9DBF594B1A8892B2432259490023C9
:1009B000FFF7E6FC90E1534B1B88C3F30723032B9F
:1009C0002FD1504B1B88DBB2012B15D013B1022B5A
:1009D0001AD021E0504B1868019030684B4B1B88AF
:1009E0009BB2042B9DBF494B1A8892B2042201A9E5
:1009F0000023FFF7C5FC6FE1444B1A883068474974
:100A0000D2B2FFF705FF67E1404B1A8830684449CE
:100A1000D2B2FFF7FDFE5FE120460121FFF73EFD68
:100A20005AE120460121FFF739FD55E12046FFF745
:100A300045FD344B1988306889B2FFF755FD4BE10D
:100A4000304B1B8833712046FFF738FD2046FFF7F7
:100A500051FD41E1314651F8040B01220023FFF71B
:100A60008FFC39E12F4900230B8030680222FFF709
:100A700087FC31E12B4900230B8030680222FFF70D
:100A80007FFC29E10022274B1A801F4B198801F0B7
:100A90005001254A11701A8802F00F021A801B8833
:100AA0009BB2032B19D8204B1B7813F0FF0F164B6A
:100AB0001B889BB203F1080304EB4314A27914BF13
:100AC000C2F34012C2F30012164B1A803068154967
:100AD00002220023FFF754FCFEE020460121FFF72D
:100AE000DDFCF9E020460121FFF7D8FCF4E02046C8
:100AF000FFF7E4FCF0E000BF94000020830000203A
:100B0000860000207C000020800000207E00002065
:100B10004C190000040000203019000034190000B6
:100B20004019000084000020820000206B4B1988CF
:100B300089B221F07F01C9B2694A11701A8802F0A6
:100B40000F021A80674B1B889BB2DBB9634B1B8873
:100B50009BB2BBB1614B1B889BB2032B12D8604B7D
:100B60001B7813F0FF0F5D4B1B889BB203F108034A
:100B700004EB431314BF202210225A712046FFF7C2
:100B80009DFCA9E020460121FFF788FCA4E0204657
:100B90000121FFF783FC9FE02046FFF78FFC9BE0DD
:100BA0004E4B198889B221F07F01C9B24C4A1170AD
:100BB0001A8802F00F021A804A4B1B889BB2002B46
:100BC00067D1464B1B889BB2002B62D0434B1B88DE
:100BD0009BB2032B5DD8424B1B7813F0FF0F2AD03A
:100BE0003E4B1B889BB2083304EB43139B7913F0F5
:100BF000200F4AD0394B1A8892B2083204EB4212C5
:100C0000202111711B889BB2083304EB4313DB795D
:100C100013F0400F39D0314B1A8892B2083204EBEE
:100C200042124021D1711B889BB2083304EB43135D
:100C300002221A7129E0294B1B889BB2083304EB6E
:100C400043139B7913F0100F1FD0244B1A8892B2D4
:100C5000083204EB4212102111711B889BB2083339
:100C600004EB4313DB7913F0200F0ED01B4B1A88D3
:100C700092B2083204EB42122021D1711B889BB240
:100C8000083304EB431301221A712046FFF716FCC8
:100C900022E020460121FFF701FC1DE02046FFF77E
:100CA0000DFC19E03068104B1B889BB2082B9DBFD0
:100CB0000D4B1A8892B208220C490023FFF760FB03
:100CC0000AE0084B1B8873712046FFF7F7FB03E02F
:100CD00020460121FFF7E2FB03B0F0BD80000020B9
:100CE000820000207C0000207E00002048000020C0
:100CF00000B583B002A941F8040D054B1868012224
:100D00001346FFF73DFB012003B05DF804FB00BF75
:100D10001802002000B583B0054B18680DF10701DB
:100D20000122FFF77BFB9DF8070003B05DF804FB91
:100D30001802002008B50648FFF73EFA30B1044B10
:100D40001B6893F8470100F0010008BD002008BDB2
:100D50001802002010B503460C46044A10681946D4
:100D600022460123FFF70CFB204610BD180200208D
:100D700038B505460C460648FFF71EFA30B1044B5D
:100D8000186829462246FFF749FB38BD002038BDC8
:100D900018020020F8B505460F460B48FFF70CFA7D
:100DA00058B167B13C46084E306829462246FFF7E5
:100DB00035FB0544241AF7D103E00020F8BD38467E
:100DC000F8BD3846F8BD00BF1802002008B5C3685A
:100DD0000846114698474FF00062034B5A6164225F
:100DE000024B1A8008BD00BF008000419000002027
:100DF000012806D1054A064B1A600122054B1A70DC
:100E0000704710B9044A024B1A60704780190000FD
:100E10008802002092000020D819000070B584B02C
:100E200004460A46244B1B7813F0FF0F34D00429E4
:100E300001D1036836E0022901D1038832E003784A
:100E40004E0004AC34440B3C86BB0CE003F00F05B1
:100E5000092D94BF45F03005373565701B09013009
:100E6000013CB042F2D330238DF8043078238DF862
:100E700005300132520004AB13440A2103F80C1C64
:100E800004AB1E440D2306F8093C0C4B186801A95D
:100E90000232FFF79BFF0CE0084B18682146FFF772
:100EA00095FF06E0560004AC34440B3C013C0020A6
:100EB000CCE704B070BD00BF8C0000208802002089
:100EC00072B6EFF30882044B1A60036883F3088854
:100ED00043681847704700BF8C0200200E4B1B88E8
:100EE0009BB24BB10C4A1388013B9BB213801BB9D8
:100EF0004FF00062094B9A61094B1B889BB24BB1C2
:100F0000074A1388013B9BB213801BB94022034B55
:100F1000C3F89820704700BF900000200080004177
:100F20008E0000202DE9F0438BB002AC894D0FCD2F
:100F30000FC495E80F0084E80F00874A9368C3F355
:100F400002430AA901EB830353F8203C83490B6059
:100F5000926892B282490A6002FB03F381490B60F6
:100F60000022814B1A607A22804B1A707A4C7B4D9A
:100F70007F4B1B681B697F4840219847034630B16F
:100F800040217D4AC2F8941064217C4A11807C4A39
:100F9000136078497B4A116000217B4A1160002B65
:100FA000E6D0784B1B681B78FF2B00F06682232B62
:100FB00040F00482754B1B7813F0FF0F05D06C4B8B
:100FC000186873490222FFF701FF684B1B78532B07
:100FD00044D16B4B1B686C4A126893421FD9694815
:100FE0000168013101600132674802609A1A694B59
:100FF00018688242684B34BF1A601860664E5A4BBC
:101000001868326800F06EFC33685F4A1168194452
:1010100011605C4A116819441160604A13705A4BA0
:101020001A68013A1A60574B1A68013A1A605B4B0A
:101030001B78584A11688B420ED24D4A1268926949
:1010400049480068C91A904730B140224A4BC3F85A
:1010500094206422494B1A8000BF9DE1522B0FD18E
:10106000434B1B685B69404A10684A4A11689847BD
:101070004FF00062404B5A616422494B1A808BE169
:101080004F2B05D1384B1B68424A12681A7083E116
:10109000482B05D1344B1B683E4A12681A807BE10D
:1010A000572B05D1304B1A683A4B1B68136073E11C
:1010B0006F2B05D12C4B18680121FFF7AFFE6BE1B8
:1010C000682B08D13348284B1B681B88036002211A
:1010D000FFF7A4FE60E1772B08D1234B1B681B6848
:1010E0002C4803600421FFF799FE55E1472B14D1EA
:1010F000284B1868FFF7E4FE2A4B1B6883F3088827
:1011000062B6294B1B7813F0FF0F00F04581184B96
:101110001B681B68062098473EE1542B09D1012229
:101120001A4B1A70124B186819490222FFF74EFE2B
:1011300032E14E2B3AD1154B1B7813F0FF0F05D13E
:101140000B4B186812490222FFF740FE00220F4B9A
:101150001A7021E1601900000040004140020020A7
:1011600038020020340200208402002030020020D7
:101170008802002044020020008000418E000020F0
:10118000280200202C0200203C0200208C000020BD
:10119000A0190000900200209402002024020020E8
:1011A000900000208C02002092000020562B57D186
:1011B000994E306899490122FFF708FE3068984936
:1011C0000322FFF703FE974F306839460122FFF7ED
:1011D000FDFD306894490D22FFF7F8FD306839466F
:1011E0000122FFF7F3FD914B0021914A1160591C38
:1011F000904A11601B78002B00F04D818C490B68E0
:1012000001330B601368581C10601B78002BF6D15B
:10121000814F874E386885493268FFF7D7FD3868B7
:1012200080490122FFF7D2FD00233360824A814BBF
:101230001A6041E10B6801330B601368581C1060A1
:101240001B78002BF6D1744E30687C49784B1A68B5
:10125000FFF7BCFD30687A490222FFF7B7FD9BE03B
:10126000582B1DD1774B1A68774B19688A4210D2D8
:101270002E6836014AF20150638A13F0010FFBD049
:101280006261A080638A13F0010FFBD032448A426E
:10129000F2D3614B18686D490322FFF797FD7BE09D
:1012A000592B44D1674B186820B9694B1A68694BB0
:1012B0001A6035E0674B1F68654B1E6823889BB238
:1012C000238080082CD04AF215584FF0000EF146CA
:1012D0004AF2035CA4F80480638A13F0010FFBD088
:1012E0002B68032B0DD970B172464B46B958B150DB
:1012F00001332968B3EB910F06D204328342F5D152
:1013000002E0734600E073466661A4F804C0628A96
:1013100012F0010FFBD09A0016441744C01AD9D11D
:101320003D4B18684C490322FFF750FD34E05A2B1F
:1013300032D1474B1E68434B1B685BB106EB030879
:10134000002716F8010B394600F068F907464645B4
:10135000F7D100E00027304B186840490122FFF721
:1013600035FD3A460DF107030DF1FF3002F00F0194
:1013700012090929CCBF3731303103F801198342F2
:10138000F4D1254E306869460822FFF71FFD30680A
:1013900033490322FFF71AFD7A22324B1A700022DA
:1013A000284B1A60304B1B7813F0FF0F65D01A4B97
:1013B00018682E490122FFF709FD5EE0A3F1300213
:1013C000D2B2092A06D81F4A303B116843EA0111FC
:1013D000116052E0A3F14102D2B2052A06D8194A9F
:1013E000373B116843EA0111116046E0A3F1610245
:1013F000D2B2052A06D8134A573B116843EA0111B5
:1014000011603AE02C2B33D10E4B1A6810490A6058
:1014100000221A6031E000BF88020020A4190000F9
:101420009C190000A8190000F4190000AC19000074
:101430003C0200202C020020B9190000B81900005D
:10144000A01900009002002034020020C4190000FE
:101450008402002088000020C8190000CC19000078
:10146000D0190000300200208C000020D4190000A8
:10147000134A13700022134B1A60134A1368013386
:101480001360124A116801311160114A12689342C7
:10149000FFF487AD6CE50F4F0B4E38680E4932688C
:1014A000FFF794FC38680D490122FFF78FFC0023F9
:1014B00033600B4A054B1A600349044ABAE600BF81
:1014C00030020020900200203C0200202C0200206C
:1014D0002802002088020020AC190000A819000092
:1014E000B919000008B5234B4022C3F89C204322C1
:1014F000C3F88C20A3F5A0535A6942F480525A6174
:101500001D4B93F84B2042F0010283F84B2093F8D7
:10151000352002F00F0283F8352093F8352042F091
:10152000200283F8352093F84A2042F0010283F824
:101530004A2093F8352002F0F00283F8352093F822
:10154000352042F0020283F835200C484FF22A6120
:101550004FF44412FEF7DCFD0023094A1370094AD8
:101560001370094A1370094A1370094A1370094A23
:10157000137008BD001C0040008000410030004096
:101580009802002022030020990200209C020020E3
:10159000230300202003002008B5C1B20248FEF753
:1015A000EDFD012008BD00BF00300040024B187E59
:1015B000C0F38000704700BF0030004008B5FFF75F
:1015C000F5FF0028FBD00248FEF7DEFD08BD00BF96
:1015D0000030004008B5FFF7E9FF30B1FFF7EEFF3C
:1015E000232814BF0020012008BD002008BD00BF33
:1015F00070B504460E4631B1451814F8010BFFF7DB
:10160000CBFFAC42F9D1304670BD00BF10B50446E7
:10161000FFF7D4FF2070012010BD00BF80EA112029
:10162000034B33F8103083EA012080B2704700BFCB
:10163000041A00002DE9F84F0646884649B30024F5
:101640002746DFF860A0DFF86090DFF860B0FFF7B2
:10165000B5FFC5B29AF80030F3B928463946FFF70E
:10166000DDFF0746B9F8003013B99BF800305BB1D5
:10167000731C3570B8F1800F02BFB9F8002002F179
:10168000FF32A9F800201E460134A4B24445DED141
:1016900005E00020BDE8F88F0120BDE8F88F38464E
:1016A000BDE8F88F200300209A02002021030020CB
:1016B0002DE9F04F83B001900022454B1A70009144
:1016C00019B90122434B1A700DE0434B009A1A805E
:1016D0000022404B1A70009B13F07F0F03D0803321
:1016E00023F07F0300933A4C0025FFF767FF237830
:1016F0004BB12570FFF762FFC0B2237823B10024FD
:10170000334B1C705FE0C0B2432821D0712859D000
:101710001528EAD11CE000222D4B1A7053E0C0B20C
:10172000062809D10BF1010B5FFA8BFB009A803A76
:101730000092019B80330193009A7AB90420FFF74D
:101740002BFFFFF73BFF0022224B1A7001243AE0E7
:101750004FF0010BDFF88080DFF878900120FFF771
:101760001BFF5846FFF718FF6FEA0B00C0B2FFF7E8
:1017700013FF019E80240027BA46B8F8003013B941
:1017800099F800202AB13578013BA8F800300136DD
:1017900000E055462846FFF7FFFE28463946FFF78A
:1017A0003DFF0746013CE8D1C0F30720FFF7F4FEF8
:1017B000F8B2FFF7F1FEFFF701FF054B1B78002B96
:1017C000ADD0A8E70024204603B0BDE8F08F00BFED
:1017D00020030020210300209A0200202DE9F0437D
:1017E00083B0074600223B4B1A7019B901223A4BCD
:1017F0001A7004E0394A11800022374B1A706425B0
:101800004FF04308364E4046FFF7C6FE344600E030
:10181000013CFFF7CBFE10B9002CF9D100E014B960
:10182000013DF0D151E001262A4C0225FFF7C6FE0A
:1018300022781AB10025274B1D7046E0C3B2012B58
:1018400002D0042B34D036E001A82946FFF7F2FE7F
:1018500038468021FFF7EEFE8046237883BBFFF7F2
:10186000ADFE00021FFA80F9FFF7A8FE484480B2DF
:101870002378012B24D0804509D19DF80430B34250
:1018800005D1F3439DF80520DBB29A4203D018201E
:10189000FFF782FE14E00620FFF77EFE23781BB1DF
:1018A00000250C4B1D7010E00136F6B28037BDE705
:1018B0000620FFF771FE0022074B1A70012504E095
:1018C000044B1B78002BF6D0EAE7284603B0BDE8AE
:1018D000F08300BF20030020210300209A02002093
:1018E00000350C0010B50023934203D0CC5CC454E7
:1018F0000133F9E710BD02440346934202D003F8D6
:10190000011BFAE77047034613F8012B002AFBD1AD
:10191000181A013870470000F8B500BFF8BC08BCC1
:101920009E467047F8B500BFF8BC08BC9E4670479D
:101930000403090441726475696E6F204C4C4300C6
:101940004D6574726F204D340000000012010002DA
:10195000020000409A232000000201020001000062
:1019600008000000100000002000000040000000FF
:1019700080000000000100000002000000040000E0
:1019800099150000BD150000AD150000F11500000F
:101990000D160000B1160000DD170000322E3000D9
:1019A0000A0D000076000000200000004E6F762037
:1019B000203620323031370031313A30393A33383D
:1019C00000000000580A0D00590A0D005A000000DE
:1019D000230A0D003E000000F10C0000150D000070
:1019E000350D0000550D0000710D0000550D000073
:1019F000950D00005B41726475696E6F3A58595AD3
:101A00005D00000000002110422063308440A5509A
:101A1000C660E770088129914AA16BB18CC1ADD134
:101A2000CEE1EFF13112100273325222B5529442DC
:101A3000F772D662399318837BB35AA3BDD39CC384
:101A4000FFF3DEE36224433420040114E664C77428
:101A5000A44485546AA54BB528850995EEE5CFF5D4
:101A6000ACC58DD55336722611163006D776F6667C
:101A70009556B4465BB77AA719973887DFF7FEE724
:101A80009DD7BCC7C448E5588668A7784008611848
:101A900002282338CCC9EDD98EE9AFF94889699974
:101AA0000AA92BB9F55AD44AB77A966A711A500A1C
:101AB000333A122AFDDBDCCBBFFB9EEB799B588BC4
:101AC0003BBB1AABA66C877CE44CC55C222C033C68
:101AD000600C411CAEED8FFDECCDCDDD2AAD0BBD14
:101AE000688D499D977EB66ED55EF44E133E322EBC
:101AF000511E700E9FFFBEEFDDDFFCCF1BBF3AAF64
:101B0000599F788F8891A981CAB1EBA10CD12DC1C1
:101B10004EF16FE18010A100C230E3200450254057
:101B200046706760B9839893FBA3DAB33DC31CD3B7
:101B30007FE35EF3B1029012F322D23235421452A7
:101B400077625672EAB5CBA5A89589856EF54FE503
:101B50002CD50DC5E234C324A014810466744764F7
:101B600024540544DBA7FAB79987B8975FE77EF757
:101B70001DC73CD7D326F2369106B0165766767647
:101B8000154634564CD96DC90EF92FE9C899E98923
:101B90008AB9ABA94458654806782768C018E10897
:101BA0008238A3287DCB5CDB3FEB1EFBF98BD89BF7
:101BB000BBAB9ABB754A545A376A167AF10AD01AE7
:101BC000B32A923A2EFD0FED6CDD4DCDAABD8BAD43
:101BD000E89DC98D267C076C645C454CA23C832C37
:101BE000E01CC10C1FEF3EFF5DCF7CDF9BAFBABF97
:101BF000D98FF89F176E367E554E745E932EB23E87
:081C0000D10EF01E00000000EF
:101C080001140000090243000201008032090400A7
:101C1800000102020000052400100104240200054E
:101C2800240600010524010001070583030800FFBD
:101C380009040100020A00000007058102400000B3
:101C4800070502024000000000C201000000080071
:0C1C5800650000004100000000000000DA
:04000003000006559E
:00000001FF

View file

@ -0,0 +1,165 @@
# Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
# Copyright (c) 2015 Arduino LLC. All right reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# -----------------------------------------------------------------------------
# Paths
ifeq ($(OS),Windows_NT)
# Are we using mingw/msys/msys2/cygwin?
ifeq ($(TERM),xterm)
T=$(shell cygpath -u $(LOCALAPPDATA))
MODULE_PATH?=$(T)/Arduino15/packages/arduino
RM=rm
SEP=/
else
MODULE_PATH?=$(LOCALAPPDATA)/Arduino15/packages/arduino
RM=rm
SEP=\\
endif
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
MODULE_PATH?=$(HOME)/.arduino15/packages/arduino
RM=rm
SEP=/
endif
ifeq ($(UNAME_S),Darwin)
MODULE_PATH?=$(HOME)/Library/Arduino15/packages/arduino/
RM=rm
SEP=/
endif
endif
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
BUILD_PATH=build
# -----------------------------------------------------------------------------
# Tools
CC=$(ARM_GCC_PATH)gcc
OBJCOPY=$(ARM_GCC_PATH)objcopy
NM=$(ARM_GCC_PATH)nm
SIZE=$(ARM_GCC_PATH)size
# -----------------------------------------------------------------------------
# Compiler options
CFLAGS_EXTRA=-D$(BOARD_CHIP) -DBOARD_ID_$(BOARD_ID)
CFLAGS=-mthumb -mcpu=cortex-m4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -ffunction-sections -fdata-sections -nostdlib -nostartfiles --param max-inline-insns-single=500
ifdef DEBUG
CFLAGS+=-g3 -O1 -DDEBUG=1
else
CFLAGS+=-Os -DDEBUG=0
endif
ELF=$(BOARD_ID)_sam_ba.elf
BIN=$(BOARD_ID)_sam_ba.bin
HEX=$(BOARD_ID)_sam_ba.hex
INCLUDES=-I"$(MODULE_PATH)/tools/CMSIS/4.5.0/CMSIS/Include/" -I"$(MODULE_PATH)/tools/CMSIS-Atmel/1.1.0/CMSIS/Device/ATMEL/"
# -----------------------------------------------------------------------------
# Linker options
LDFLAGS=-mthumb -mcpu=cortex-m4 -Wall -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all
LDFLAGS+=-Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols --specs=nano.specs --specs=nosys.specs
# -----------------------------------------------------------------------------
# Source files and objects
SOURCES= \
board_driver_led.c \
board_driver_serial.c \
board_driver_usb.c \
board_init.c \
board_startup.c \
main.c \
sam_ba_usb.c \
sam_ba_cdc.c \
sam_ba_monitor.c \
sam_ba_serial.c
OBJECTS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.o))
DEPS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.d))
ifneq "test$(AVRSTUDIO_EXE_PATH)" "test"
AS_BUILD=copy_for_atmel_studio
AS_CLEAN=clean_for_atmel_studio
else
AS_BUILD=
AS_CLEAN=
endif
all: print_info $(SOURCES) $(BIN) $(HEX) $(AS_BUILD)
$(ELF): Makefile $(BUILD_PATH) $(OBJECTS)
@echo ----------------------------------------------------------
@echo Creating ELF binary
"$(CC)" -L. -L$(BUILD_PATH) $(LDFLAGS) -Os -Wl,--gc-sections -save-temps -Tbootloader_$(BOARD_ID).ld -Wl,-Map,"$(BUILD_PATH)/$(NAME).map" -o "$(BUILD_PATH)/$(ELF)" -Wl,--start-group $(OBJECTS) -lm -Wl,--end-group
"$(NM)" "$(BUILD_PATH)/$(ELF)" >"$(BUILD_PATH)/$(NAME)_symbols.txt"
"$(SIZE)" --format=sysv -t -x $(BUILD_PATH)/$(ELF)
$(BIN): $(ELF)
@echo ----------------------------------------------------------
@echo Creating flash binary
"$(OBJCOPY)" -O binary $(BUILD_PATH)/$< $@
$(HEX): $(ELF)
@echo ----------------------------------------------------------
@echo Creating flash binary
"$(OBJCOPY)" -O ihex $(BUILD_PATH)/$< $@
$(BUILD_PATH)/%.o: %.c
@echo ----------------------------------------------------------
@echo Compiling $< to $@
"$(CC)" $(CFLAGS) $(CFLAGS_EXTRA) $(INCLUDES) $< -o $@
@echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$(BUILD_PATH):
@echo ----------------------------------------------------------
@echo Creating build folder
-mkdir $(BUILD_PATH)
print_info:
@echo ----------------------------------------------------------
@echo Compiling bootloader using
@echo BASE PATH = $(MODULE_PATH)
@echo GCC PATH = $(ARM_GCC_PATH)
# @echo OS = $(OS)
# @echo SHELL = $(SHELL)
# @echo TERM = $(TERM)
# "$(CC)" -v
# env
copy_for_atmel_studio: $(BIN) $(HEX)
@echo ----------------------------------------------------------
@echo Atmel Studio detected, copying ELF to project root for debug
cp $(BUILD_PATH)/$(ELF) .
clean_for_atmel_studio:
@echo ----------------------------------------------------------
@echo Atmel Studio detected, cleaning ELF from project root
-$(RM) ./$(ELF)
clean: $(AS_CLEAN)
@echo ----------------------------------------------------------
@echo Cleaning project
-$(RM) $(BIN)
-$(RM) $(HEX)
-$(RM) $(BUILD_PATH)/*.*
-rmdir $(BUILD_PATH)
.phony: print_info $(BUILD_PATH)

View file

@ -0,0 +1,86 @@
# Metro M4 Bootloader
## 1- Prerequisites
The project build is based on Makefile system.
Makefile is present at project root and try to handle multi-platform cases.
Multi-plaform GCC is provided by ARM here: https://launchpad.net/gcc-arm-embedded/+download
Atmel Studio contains both make and ARM GCC toolchain. You don't need to install them in this specific use case.
### Windows
* Native command line
Make binary can be obtained here: http://gnuwin32.sourceforge.net/packages/make.htm
* Cygwin/MSys/MSys2/Babun/etc...
It is available natively in all distributions.
* Atmel Studio
An Atmel Studio **7** Makefile-based project is present at project root, just open samd21_sam_ba.atsln file in AS7.
### Linux
Make is usually available by default.
### OS X
Make is available through XCode package.
## 2- Selecting available SAM-BA interfaces
By default both USB and UART are made available, but this parameter can be modified in sam_ba_monitor.h, line 31:
Set the define SAM_BA_INTERFACE to
* SAM_BA_UART_ONLY for only UART interface
* SAM_BA_USBCDC_ONLY for only USB CDC interface
* SAM_BA_BOTH_INTERFACES for enabling both the interfaces
## 3- Behaviour
This bootloader implements the double-tap on Reset button.
By quickly pressing this button two times, the board will reset and stay in bootloader, waiting for communication on either USB or USART.
The USB port in use is the USB Native port, close to the Reset button.
The USART in use is the one available on pins D0/D1, labelled respectively RX/TX. Communication parameters are a baudrate at 115200, 8bits of data, no parity and 1 stop bit (8N1).
## 4- Description
**Pinmap**
The following pins are used by the program :
PA25 : input/output (USB DP)
PA24 : input/output (USB DM)
PA23 : input (USART RX)
PA22 : output (USART TX)
The application board shall avoid driving the PA25, PA24, PB23 and PB22 signals while the boot program is running (after a POR for example).
**Clock system**
CPU runs at 48MHz from Generic Clock Generator 0 on DFLL48M.
Generic Clock Generator 1 is using external 32kHz oscillator and is the source of DFLL48M.
USB and USART are using Generic Clock Generator 0 also.
**Memory Mapping**
Bootloader code will be located at 0x0 and executed before any applicative code.
Applications compiled to be executed along with the bootloader will start at 0x2000 (see linker script bootloader_samdx1.ld).
Before jumping to the application, the bootloader changes the VTOR register to use the interrupt vectors of the application @0x2000.<- not required as application code is taking care of this.
## 5- How to build
If not specified the makefile builds for **Metro M4**:
```
make
```

View file

@ -0,0 +1,32 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if defined(BOARD_ID_METRO_M4)
#include "board_definitions_metro_m4.h"
#elif defined(BOARD_ID_FEATHER_M4)
#include "board_definitions_feather_m4.h"
#else
#error You must define a BOARD_ID and add the corresponding definitions in board_definitions.h
#endif
// Common definitions
// ------------------
#define BOOT_PIN_MASK (1U << (BOOT_LOAD_PIN & 0x1f))

View file

@ -0,0 +1,82 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _BOARD_DEFINITIONS_H_
#define _BOARD_DEFINITIONS_H_
/*
* USB device definitions
*/
#define STRING_PRODUCT "Feather M4"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x9A
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x22
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
* quickly tapping two times on the reset button.
* BOOT_DOUBLE_TAP_ADDRESS must point to a free SRAM cell that must not
* be touched from the loaded application.
*/
#define BOOT_DOUBLE_TAP_ADDRESS (HSRAM_ADDR + HSRAM_SIZE - 4)
#define BOOT_DOUBLE_TAP_DATA (*((volatile uint32_t *)BOOT_DOUBLE_TAP_ADDRESS))
/*
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
#define GPIO(port, pin) ((((port)&0x7u) << 5) + ((pin)&0x1Fu))
#define BOOK_USART_MASK APBAMASK
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX MCLK_APBAMASK_SERCOM0
#define BOOT_GCLK_ID_CORE SERCOM0_GCLK_ID_CORE
#define BOOT_GCLK_ID_SLOW SERCOM0_GCLK_ID_SLOW
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_UNUSED
#define BOOT_USART_PAD2 PINMUX_UNUSED
#define BOOT_USART_PAD1 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD0 PINMUX_PA11C_SERCOM0_PAD3
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
/* Frequency of the board main oscillator */
#define VARIANT_MAINOSC (32768ul)
/* Calibration values for DFLL48 pll */
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (17)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (3)
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
#endif // _BOARD_DEFINITIONS_H_

View file

@ -0,0 +1,82 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _BOARD_DEFINITIONS_H_
#define _BOARD_DEFINITIONS_H_
/*
* USB device definitions
*/
#define STRING_PRODUCT "Metro M4"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x9A
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x20
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
* quickly tapping two times on the reset button.
* BOOT_DOUBLE_TAP_ADDRESS must point to a free SRAM cell that must not
* be touched from the loaded application.
*/
#define BOOT_DOUBLE_TAP_ADDRESS (HSRAM_ADDR + HSRAM_SIZE - 4)
#define BOOT_DOUBLE_TAP_DATA (*((volatile uint32_t *)BOOT_DOUBLE_TAP_ADDRESS))
/*
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
#define GPIO(port, pin) ((((port)&0x7u) << 5) + ((pin)&0x1Fu))
#define BOOK_USART_MASK APBAMASK
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX MCLK_APBAMASK_SERCOM0
#define BOOT_GCLK_ID_CORE SERCOM0_GCLK_ID_CORE
#define BOOT_GCLK_ID_SLOW SERCOM0_GCLK_ID_SLOW
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_UNUSED
#define BOOT_USART_PAD2 PINMUX_UNUSED
#define BOOT_USART_PAD1 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD0 PINMUX_PA11C_SERCOM0_PAD3
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
/* Frequency of the board main oscillator */
#define VARIANT_MAINOSC (32768ul)
/* Calibration values for DFLL48 pll */
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (21)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (6)
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
#endif // _BOARD_DEFINITIONS_H_

View file

@ -0,0 +1,42 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "board_driver_led.h"
volatile uint8_t ledKeepValue = 0;
volatile uint8_t ledTargetValue = 20;
volatile int8_t ledDirection = 1;
inline void LED_pulse()
{
if (ledKeepValue == 0) {
ledTargetValue += ledDirection;
LED_toggle();
}
ledKeepValue ++;
if (ledTargetValue > 240 || ledTargetValue < 10) {
ledDirection = -ledDirection;
ledTargetValue += ledDirection;
}
if (ledKeepValue == ledTargetValue) {
LED_toggle();
}
}

View file

@ -0,0 +1,63 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _BOARD_DRIVER_LED_
#define _BOARD_DRIVER_LED_
#include <sam.h>
#include "board_definitions.h"
#if defined(BOARD_LED_PORT)
inline void LED_init(void) { PORT->Group[BOARD_LED_PORT].DIRSET.reg = (1<<BOARD_LED_PIN); }
inline void LED_on(void) { PORT->Group[BOARD_LED_PORT].OUTSET.reg = (1<<BOARD_LED_PIN); }
inline void LED_off(void) { PORT->Group[BOARD_LED_PORT].OUTCLR.reg = (1<<BOARD_LED_PIN); }
inline void LED_toggle(void) { PORT->Group[BOARD_LED_PORT].OUTTGL.reg = (1<<BOARD_LED_PIN); }
#else
inline void LED_init(void) { }
inline void LED_on(void) { }
inline void LED_off(void) { }
inline void LED_toggle(void) { }
#endif
void LED_pulse();
#if defined(BOARD_LEDRX_PORT)
inline void LEDRX_init(void) { PORT->Group[BOARD_LEDRX_PORT].DIRSET.reg = (1<<BOARD_LEDRX_PIN); }
inline void LEDRX_on(void) { PORT->Group[BOARD_LEDRX_PORT].OUTCLR.reg = (1<<BOARD_LEDRX_PIN); }
inline void LEDRX_off(void) { PORT->Group[BOARD_LEDRX_PORT].OUTSET.reg = (1<<BOARD_LEDRX_PIN); }
inline void LEDRX_toggle(void) { PORT->Group[BOARD_LEDRX_PORT].OUTTGL.reg = (1<<BOARD_LEDRX_PIN); }
#else
inline void LEDRX_init(void) { }
inline void LEDRX_on(void) { }
inline void LEDRX_off(void) { }
inline void LEDRX_toggle(void) { }
#endif
#if defined(BOARD_LEDTX_PORT)
inline void LEDTX_init(void) { PORT->Group[BOARD_LEDTX_PORT].DIRSET.reg = (1<<BOARD_LEDTX_PIN); }
inline void LEDTX_on(void) { PORT->Group[BOARD_LEDTX_PORT].OUTCLR.reg = (1<<BOARD_LEDTX_PIN); }
inline void LEDTX_off(void) { PORT->Group[BOARD_LEDTX_PORT].OUTSET.reg = (1<<BOARD_LEDTX_PIN); }
inline void LEDTX_toggle(void) { PORT->Group[BOARD_LEDTX_PORT].OUTTGL.reg = (1<<BOARD_LEDTX_PIN); }
#else
inline void LEDTX_init(void) { }
inline void LEDTX_on(void) { }
inline void LEDTX_off(void) { }
inline void LEDTX_toggle(void) { }
#endif
#endif // _BOARD_DRIVER_LED_

View file

@ -0,0 +1,104 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "board_driver_serial.h"
bool uart_drv_error_flag = false;
void uart_basic_init(Sercom *sercom, uint16_t baud_val, enum uart_pad_settings pad_conf)
{
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.ENABLE);
/* Disable the SERCOM UART module */
sercom->USART.CTRLA.bit.ENABLE = 0;
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.SWRST);
/* Perform a software reset */
sercom->USART.CTRLA.bit.SWRST = 1;
/* Wait for synchronization */
while(sercom->USART.CTRLA.bit.SWRST);
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.SWRST || sercom->USART.SYNCBUSY.bit.ENABLE);
/* Update the UART pad settings, mode and data order settings */
sercom->USART.CTRLA.reg = pad_conf | SERCOM_USART_CTRLA_MODE(1) | SERCOM_USART_CTRLA_DORD;
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.CTRLB);
/* Enable transmit and receive and set data size to 8 bits */
sercom->USART.CTRLB.reg = SERCOM_USART_CTRLB_RXEN | SERCOM_USART_CTRLB_TXEN | SERCOM_USART_CTRLB_CHSIZE(0);
/* Load the baud value */
sercom->USART.BAUD.reg = baud_val;
///* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.ENABLE);
/* Enable SERCOM UART */
sercom->USART.CTRLA.bit.ENABLE = 1;
}
void uart_disable(Sercom *sercom)
{
/* Wait for synchronization */
while(sercom->USART.SYNCBUSY.bit.ENABLE);
/* Disable SERCOM UART */
sercom->USART.CTRLA.bit.ENABLE = 0;
}
void uart_write_byte(Sercom *sercom, uint8_t data)
{
/* Wait for Data Register Empty flag */
while(!sercom->USART.INTFLAG.bit.DRE);
/* Write the data to DATA register */
sercom->USART.DATA.reg = (uint16_t)data;
}
uint8_t uart_read_byte(Sercom *sercom)
{
/* Wait for Receive Complete flag */
while(!sercom->USART.INTFLAG.bit.RXC);
/* Check for errors */
if (sercom->USART.STATUS.bit.PERR || sercom->USART.STATUS.bit.FERR || sercom->USART.STATUS.bit.BUFOVF)
/* Set the error flag */
uart_drv_error_flag = true;
/* Return the read data */
return((uint8_t)sercom->USART.DATA.reg);
}
void uart_write_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length)
{
/* Do the following for specified length */
do {
/* Wait for Data Register Empty flag */
while(!sercom->USART.INTFLAG.bit.DRE);
/* Send data from the buffer */
sercom->USART.DATA.reg = (uint16_t)*ptr++;
} while (length--);
}
void uart_read_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length)
{
/* Do the following for specified length */
do {
/* Wait for Receive Complete flag */
while(!sercom->USART.INTFLAG.bit.RXC);
/* Check for errors */
if (sercom->USART.STATUS.bit.PERR || sercom->USART.STATUS.bit.FERR || sercom->USART.STATUS.bit.BUFOVF)
/* Set the error flag */
uart_drv_error_flag = true;
/* Store the read data to the buffer */
*ptr++ = (uint8_t)sercom->USART.DATA.reg;
} while (length--);
}

View file

@ -0,0 +1,89 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef UART_DRIVER_H
#define UART_DRIVER_H
#include <stdio.h>
#include <stdbool.h>
#include <sam.h>
#define PINMUX_UNUSED 0xFFFFFFFF
/* SERCOM UART available pad settings */
enum uart_pad_settings {
UART_RX_PAD0_TX_PAD2 = SERCOM_USART_CTRLA_RXPO(0) | SERCOM_USART_CTRLA_TXPO(1),
UART_RX_PAD1_TX_PAD2 = SERCOM_USART_CTRLA_RXPO(1) | SERCOM_USART_CTRLA_TXPO(1),
UART_RX_PAD2_TX_PAD0 = SERCOM_USART_CTRLA_RXPO(2),
UART_RX_PAD3_TX_PAD0 = SERCOM_USART_CTRLA_RXPO(3),
UART_RX_PAD1_TX_PAD0 = SERCOM_USART_CTRLA_RXPO(1),
UART_RX_PAD3_TX_PAD2 = SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(1),
};
/**
* \brief Initializes the UART
*
* \param Pointer to SERCOM instance
* \param Baud value corresponding to the desired baudrate
* \param SERCOM pad settings
*/
void uart_basic_init(Sercom *sercom, uint16_t baud_val, enum uart_pad_settings pad_conf);
/**
* \brief Disables UART interface
*
* \param Pointer to SERCOM instance
*/
void uart_disable(Sercom *sercom);
/**
* \brief Sends a single byte through UART interface
*
* \param Pointer to SERCOM instance
* \param Data to send
*/
void uart_write_byte(Sercom *sercom, uint8_t data);
/**
* \brief Reads a single character from UART interface
*
* \param Pointer to SERCOM instance
* \return Data byte read
*/
uint8_t uart_read_byte(Sercom *sercom);
/**
* \brief Sends buffer on UART interface
*
* \param Pointer to SERCOM instance
* \param Pointer to data to send
* \param Number of bytes to send
*/
void uart_write_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length);
/**
* \brief Reads data on UART interface
*
* \param Pointer to SERCOM instance
* \param Pointer to store read data
* \param Number of bytes to read
*/
void uart_read_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length);
#endif

View file

@ -0,0 +1,359 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <string.h>
#include "board_driver_usb.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#define NVM_USB_PAD_TRANSN_POS 32
#define NVM_USB_PAD_TRANSN_SIZE 5
#define NVM_USB_PAD_TRANSP_POS 37
#define NVM_USB_PAD_TRANSP_SIZE 5
#define NVM_USB_PAD_TRIM_POS 42
#define NVM_USB_PAD_TRIM_SIZE 3
__attribute__((__aligned__(4))) UsbDeviceDescriptor usb_endpoint_table[MAX_EP]; // Initialized to zero in USB_Init
__attribute__((__aligned__(4))) uint8_t udd_ep_out_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
__attribute__((__aligned__(4))) uint8_t udd_ep_in_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
static volatile bool read_job = false;
/*----------------------------------------------------------------------------
* \brief
*/
P_USB_CDC USB_Open(P_USB_CDC pCdc, Usb *pUsb)
{
pCdc->pUsb = pUsb;
pCdc->currentConfiguration = 0;
pCdc->currentConnection = 0;
pCdc->IsConfigured = USB_IsConfigured;
// pCdc->Write = USB_Write;
// pCdc->Read = USB_Read;
pCdc->pUsb->HOST.CTRLA.bit.ENABLE = true;
while( pCdc->pUsb->HOST.SYNCBUSY.reg & USB_SYNCBUSY_ENABLE ); //wait for sync
return pCdc;
}
/**
* \brief Load USB calibration value from NVM
*/
static void USB_load_calib(void)
{
Usb * hw = USB;
uint32_t pad_transn
= (*((uint32_t *)(NVMCTRL_SW0) + (NVM_USB_PAD_TRANSN_POS / 32)) >> (NVM_USB_PAD_TRANSN_POS % 32))
& ((1 << NVM_USB_PAD_TRANSN_SIZE) - 1);
uint32_t pad_transp
= (*((uint32_t *)(NVMCTRL_SW0) + (NVM_USB_PAD_TRANSP_POS / 32)) >> (NVM_USB_PAD_TRANSP_POS % 32))
& ((1 << NVM_USB_PAD_TRANSP_SIZE) - 1);
uint32_t pad_trim = (*((uint32_t *)(NVMCTRL_SW0) + (NVM_USB_PAD_TRIM_POS / 32)) >> (NVM_USB_PAD_TRIM_POS % 32))
& ((1 << NVM_USB_PAD_TRIM_SIZE) - 1);
if (pad_transn == 0 || pad_transn == 0x1F) {
pad_transn = 9;
}
if (pad_transp == 0 || pad_transp == 0x1F) {
pad_transp = 25;
}
if (pad_trim == 0 || pad_trim == 0x7) {
pad_trim = 6;
}
hw->DEVICE.PADCAL.reg = USB_PADCAL_TRANSN(pad_transn) | USB_PADCAL_TRANSP(pad_transp) | USB_PADCAL_TRIM(pad_trim);
hw->DEVICE.QOSCTRL.bit.CQOS = 3;
hw->DEVICE.QOSCTRL.bit.DQOS = 3;
}
/*----------------------------------------------------------------------------
* \brief Initializes USB
*/
void USB_Init(void)
{
uint32_t pad_transn, pad_transp, pad_trim;
/* Enable USB clock */
MCLK->APBBMASK.bit.USB_ = 1;
/* Set up the USB DP/DN pins */
PORT->Group[0].PINCFG[PIN_PA24H_USB_DM].bit.PMUXEN = 1;
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24H_USB_DM & 0x01u)));
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg |= MUX_PA24H_USB_DM << (4 * (PIN_PA24H_USB_DM & 0x01u));
PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1;
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u)));
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u));
/* ----------------------------------------------------------------------------------------------
* Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference)
*
*/
GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK0_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB;
while(GCLK->SYNCBUSY.bit.GENCTRL0)
{
/* Wait for synchronization */
}
/* Reset */
USB->DEVICE.CTRLA.bit.SWRST = 1;
while (USB->DEVICE.SYNCBUSY.bit.SWRST)
{
/* Sync wait */
}
USB_load_calib();
/* Set the configuration */
/* Set mode to Device mode */
USB->HOST.CTRLA.bit.MODE = 0;
/* Enable Run in Standby */
USB->HOST.CTRLA.bit.RUNSTDBY = true;
/* Set the descriptor address */
USB->HOST.DESCADD.reg = (uint32_t)(&usb_endpoint_table[0]);
/* Set speed configuration to Full speed */
USB->DEVICE.CTRLB.bit.SPDCONF = USB_DEVICE_CTRLB_SPDCONF_FS_Val;
/* Attach to the USB host */
USB->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH;
/* Initialize endpoint table RAM location to a known value 0 */
memset((uint8_t *)(&usb_endpoint_table[0]), 0, sizeof(usb_endpoint_table));
}
uint32_t USB_Write(Usb *pUsb, const char *pData, uint32_t length, uint8_t ep_num)
{
uint32_t data_address;
uint8_t buf_index;
/* Set buffer index */
buf_index = (ep_num == 0) ? 0 : 1;
/* Check for requirement for multi-packet or auto zlp */
if (length >= (1 << (usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.SIZE + 3)))
{
/* Update the EP data address */
data_address = (uint32_t) pData;
/* Enable auto zlp */
usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.AUTO_ZLP = true;
}
else
{
/* Copy to local buffer */
memcpy(udd_ep_in_cache_buffer[buf_index], pData, length);
/* Update the EP data address */
data_address = (uint32_t) &udd_ep_in_cache_buffer[buf_index];
}
/* Set the buffer address for ep data */
usb_endpoint_table[ep_num].DeviceDescBank[1].ADDR.reg = data_address;
/* Set the byte count as zero */
usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.BYTE_COUNT = length;
/* Set the multi packet size as zero for multi-packet transfers where length > ep size */
usb_endpoint_table[ep_num].DeviceDescBank[1].PCKSIZE.bit.MULTI_PACKET_SIZE = 0;
/* Clear the transfer complete flag */
pUsb->DEVICE.DeviceEndpoint[ep_num].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT1;
/* Set the bank as ready */
pUsb->DEVICE.DeviceEndpoint[ep_num].EPSTATUSSET.bit.BK1RDY = true;
/* Wait for transfer to complete */
while ( (pUsb->DEVICE.DeviceEndpoint[ep_num].EPINTFLAG.bit.TRCPT1) == 0 );
return length;
}
/*----------------------------------------------------------------------------
* \brief Read available data from Endpoint OUT
*/
uint32_t USB_Read(Usb *pUsb, char *pData, uint32_t length)
{
uint32_t packetSize = 0;
if (!read_job)
{
/* Set the buffer address for ep data */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].ADDR.reg = (uint32_t)&udd_ep_out_cache_buffer[USB_EP_OUT-1];
/* Set the byte count as zero */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT = 0;
/* Set the byte count as zero */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.MULTI_PACKET_SIZE = 0;
/* Start the reception by clearing the bank 0 ready bit */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSCLR.bit.BK0RDY = true;
/* set the user flag */
read_job = true;
}
/* Check for Transfer Complete 0 flag */
if ( pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.bit.TRCPT0 )
{
/* Set packet size */
packetSize = SAM_BA_MIN(usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT, length);
/* Copy read data to user buffer */
memcpy(pData, udd_ep_out_cache_buffer[USB_EP_OUT-1], packetSize);
/* Clear the Transfer Complete 0 flag */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT0;
/* Clear the user flag */
read_job = false;
}
return packetSize;
}
uint32_t USB_Read_blocking(Usb *pUsb, char *pData, uint32_t length)
{
if (read_job)
{
/* Stop the reception by setting the bank 0 ready bit */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSSET.bit.BK0RDY = true;
/* Clear the user flag */
read_job = false;
}
/* Set the buffer address for ep data */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].ADDR.reg = ((uint32_t)pData);
/* Set the byte count as zero */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT = 0;
/* Set the multi packet size as zero for multi-packet transfers where length > ep size */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.MULTI_PACKET_SIZE = length;
/* Clear the bank 0 ready flag */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSCLR.bit.BK0RDY = true;
/* Wait for transfer to complete */
while (!( pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.bit.TRCPT0 ));
/* Clear Transfer complete 0 flag */
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT0;
return length;
}
/*----------------------------------------------------------------------------
* \brief Test if the device is configured and handle enumeration
*/
uint8_t USB_IsConfigured(P_USB_CDC pCdc)
{
Usb *pUsb = pCdc->pUsb;
/* Check for End of Reset flag */
if (pUsb->DEVICE.INTFLAG.reg & USB_DEVICE_INTFLAG_EORST)
{
/* Clear the flag */
pUsb->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_EORST;
/* Set Device address as 0 */
pUsb->DEVICE.DADD.reg = USB_DEVICE_DADD_ADDEN | 0;
/* Configure endpoint 0 */
/* Configure Endpoint 0 for Control IN and Control OUT */
pUsb->DEVICE.DeviceEndpoint[0].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(1) | USB_DEVICE_EPCFG_EPTYPE1(1);
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_BK0RDY;
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
/* Configure control OUT Packet size to 64 bytes */
usb_endpoint_table[0].DeviceDescBank[0].PCKSIZE.bit.SIZE = 3;
/* Configure control IN Packet size to 64 bytes */
usb_endpoint_table[0].DeviceDescBank[1].PCKSIZE.bit.SIZE = 3;
/* Configure the data buffer address for control OUT */
usb_endpoint_table[0].DeviceDescBank[0].ADDR.reg = (uint32_t)&udd_ep_out_cache_buffer[0];
/* Configure the data buffer address for control IN */
usb_endpoint_table[0].DeviceDescBank[1].ADDR.reg = (uint32_t)&udd_ep_in_cache_buffer[0];
/* Set Multipacket size to 8 for control OUT and byte count to 0*/
usb_endpoint_table[0].DeviceDescBank[0].PCKSIZE.bit.MULTI_PACKET_SIZE = 8;
usb_endpoint_table[0].DeviceDescBank[0].PCKSIZE.bit.BYTE_COUNT = 0;
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK0RDY;
// Reset current configuration value to 0
pCdc->currentConfiguration = 0;
}
else
{
if (pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.reg & USB_DEVICE_EPINTFLAG_RXSTP)
{
sam_ba_usb_CDC_Enumerate(pCdc);
}
}
return pCdc->currentConfiguration;
}
/*----------------------------------------------------------------------------
* \brief Stall the control endpoint
*/
void USB_SendStall(Usb *pUsb, bool direction_in)
{
/* Check the direction */
if (direction_in)
{
/* Set STALL request on IN direction */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.bit.STALLRQ1 = 1;
}
else
{
/* Set STALL request on OUT direction */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.bit.STALLRQ0 = 1;
}
}
/*----------------------------------------------------------------------------
* \brief Send zero length packet through the control endpoint
*/
void USB_SendZlp(Usb *pUsb)
{
/* Set the byte count as zero */
usb_endpoint_table[0].DeviceDescBank[1].PCKSIZE.bit.BYTE_COUNT = 0;
/* Clear the transfer complete flag */
pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT1;
/* Set the bank as ready */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSSET.bit.BK1RDY = true;
/* Wait for transfer to complete */
while (!( pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.bit.TRCPT1 ));
}
/*----------------------------------------------------------------------------
* \brief Set USB device address obtained from host
*/
void USB_SetAddress(Usb *pUsb, uint16_t wValue)
{
pUsb->DEVICE.DADD.reg = USB_DEVICE_DADD_ADDEN | wValue;
}
/*----------------------------------------------------------------------------
* \brief Configure USB device
*/
void USB_Configure(Usb *pUsb)
{
/* Configure BULK OUT endpoint for CDC Data interface*/
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(3);
/* Set maximum packet size as 64 bytes */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].PCKSIZE.bit.SIZE = 3;
pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_BK0RDY;
/* Configure the data buffer */
usb_endpoint_table[USB_EP_OUT].DeviceDescBank[0].ADDR.reg = (uint32_t)&udd_ep_out_cache_buffer[1];
/* Configure BULK IN endpoint for CDC Data interface */
pUsb->DEVICE.DeviceEndpoint[USB_EP_IN].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE1(3);
/* Set maximum packet size as 64 bytes */
usb_endpoint_table[USB_EP_IN].DeviceDescBank[1].PCKSIZE.bit.SIZE = 3;
pUsb->DEVICE.DeviceEndpoint[USB_EP_IN].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
/* Configure the data buffer */
usb_endpoint_table[USB_EP_IN].DeviceDescBank[1].ADDR.reg = (uint32_t)&udd_ep_in_cache_buffer[1];
/* Configure INTERRUPT IN endpoint for CDC COMM interface*/
pUsb->DEVICE.DeviceEndpoint[USB_EP_COMM].EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE1(4);
/* Set maximum packet size as 64 bytes */
usb_endpoint_table[USB_EP_COMM].DeviceDescBank[1].PCKSIZE.bit.SIZE = 0;
pUsb->DEVICE.DeviceEndpoint[USB_EP_COMM].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
}

View file

@ -0,0 +1,45 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _BOARD_DRIVER_USB_H_
#define _BOARD_DRIVER_USB_H_
#include "sam_ba_cdc.h"
extern UsbDeviceDescriptor usb_endpoint_table[MAX_EP];
extern uint8_t udd_ep_out_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
extern uint8_t udd_ep_in_cache_buffer[2][64]; //1 for CTRL, 1 for BULK
P_USB_CDC USB_Open(P_USB_CDC pCdc, Usb *pUsb);
void USB_Init(void);
uint32_t USB_Write(Usb *pUsb, const char *pData, uint32_t length, uint8_t ep_num);
uint32_t USB_Read(Usb *pUsb, char *pData, uint32_t length);
uint32_t USB_Read_blocking(Usb *pUsb, char *pData, uint32_t length);
uint8_t USB_IsConfigured(P_USB_CDC pCdc);
void USB_SendStall(Usb *pUsb, bool direction_in);
void USB_SendZlp(Usb *pUsb);
void USB_SetAddress(Usb *pUsb, uint16_t wValue);
void USB_Configure(Usb *pUsb);
#endif // _BOARD_DRIVER_USB_H_

View file

@ -0,0 +1,145 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <sam.h>
#include "board_definitions.h"
/**
* \brief system_init() configures the needed clocks and according Flash Read Wait States.
* We need to:
* 1) Enable XOSC32K clock (External on-board 32.768Hz oscillator), will be used as DFLL48M reference.
* 2) Put XOSC32K as source of Generic Clock Generator 3
* 3) Put Generic Clock Generator 3 as source for Generic Clock Multiplexer 0 (DFLL48M reference)
* 4) Enable DFLL48M clock
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
*/
// Constants for Clock generators
#define GENERIC_CLOCK_GENERATOR_MAIN (0u)
#define GENERIC_CLOCK_GENERATOR_XOSC32K (3u)
#define GENERIC_CLOCK_GENERATOR_OSCULP32K (2u) /* Initialized at reset for WDT */
//#define GENERIC_CLOCK_GENERATOR_OSC8M (3u)
// Constants for Clock multiplexers
#define GENERIC_CLOCK_MULTIPLEXER_DFLL48M (0u)
void board_init(void)
{
/* Set 1 Flash Wait State for 48MHz */
NVMCTRL->CTRLA.reg |= NVMCTRL_CTRLA_RWS(0);
/* ----------------------------------------------------------------------------------------------
* 1) Enable XOSC32K clock (External on-board 32.768Hz oscillator)
*/
OSC32KCTRL->XOSC32K.reg = OSC32KCTRL_XOSC32K_ENABLE | OSC32KCTRL_XOSC32K_EN32K | OSC32KCTRL_XOSC32K_EN32K | OSC32KCTRL_XOSC32K_CGM_XT | OSC32KCTRL_XOSC32K_XTALEN;
while( (OSC32KCTRL->STATUS.reg & OSC32KCTRL_STATUS_XOSC32KRDY) == 0 ){
/* Wait for oscillator to be ready */
}
OSC32KCTRL->RTCCTRL.bit.RTCSEL = OSC32KCTRL_RTCCTRL_RTCSEL_ULP1K;
/* Software reset the module to ensure it is re-initialized correctly */
/* Note: Due to synchronization, there is a delay from writing CTRL.SWRST until the reset is complete.
* CTRL.SWRST and STATUS.SYNCBUSY will both be cleared when the reset is complete
*/
GCLK->CTRLA.bit.SWRST = 1;
while ( GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_SWRST ){
/* wait for reset to complete */
}
/* ----------------------------------------------------------------------------------------------
* 2) Put XOSC32K as source of Generic Clock Generator 3
*/
GCLK->GENCTRL[GENERIC_CLOCK_GENERATOR_XOSC32K].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_XOSC32K) | //generic clock gen 3
GCLK_GENCTRL_GENEN;
while ( GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL3 ){
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 3) Put Generic Clock Generator 3 as source for Generic Clock Gen 0 (DFLL48M reference)
*/
GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_OSCULP32K) | GCLK_GENCTRL_GENEN;
/* ----------------------------------------------------------------------------------------------
* 4) Enable DFLL48M clock
*/
/* DFLL Configuration in Open Loop mode */
OSCCTRL->DFLLCTRLA.reg = 0;
//GCLK->PCHCTRL[OSCCTRL_GCLK_ID_DFLL48].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK3_Val);
OSCCTRL->DFLLMUL.reg = OSCCTRL_DFLLMUL_CSTEP( 0x1 ) |
OSCCTRL_DFLLMUL_FSTEP( 0x1 ) |
OSCCTRL_DFLLMUL_MUL( 0 );
while ( OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_DFLLMUL )
{
/* Wait for synchronization */
}
OSCCTRL->DFLLCTRLB.reg = 0;
while ( OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_DFLLCTRLB )
{
/* Wait for synchronization */
}
OSCCTRL->DFLLCTRLA.reg |= OSCCTRL_DFLLCTRLA_ENABLE;
while ( OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_ENABLE )
{
/* Wait for synchronization */
}
OSCCTRL->DFLLVAL.reg = OSCCTRL->DFLLVAL.reg;
while( OSCCTRL->DFLLSYNC.bit.DFLLVAL );
OSCCTRL->DFLLCTRLB.reg = OSCCTRL_DFLLCTRLB_WAITLOCK |
OSCCTRL_DFLLCTRLB_CCDIS | OSCCTRL_DFLLCTRLB_USBCRM ;
while ( !OSCCTRL->STATUS.bit.DFLLRDY )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
*/
GCLK->GENCTRL[GENERIC_CLOCK_GENERATOR_MAIN].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL) |
GCLK_GENCTRL_IDC |
GCLK_GENCTRL_OE |
GCLK_GENCTRL_GENEN;
while ( GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL0 )
{
/* Wait for synchronization */
}
/* Turn on the digital interface clock */
//MCLK->APBAMASK.reg |= MCLK_APBAMASK_GCLK;
/*
* Now that all system clocks are configured, we can set CLKDIV .
* These values are normally the ones present after Reset.
*/
MCLK->CPUDIV.reg = MCLK_CPUDIV_DIV_DIV1;
}

View file

@ -0,0 +1,160 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <sam.h>
struct ConstVectors
{
/* Stack pointer */
void* pvStack;
/* Cortex-M handlers */
void* pfnReset_Handler;
void* pfnNMI_Handler;
void* pfnHardFault_Handler;
void* pfnMemManage_Handler;
void* pfnBusFault_Handler;
void* pfnUsageFault_Handler;
void* pvReservedM9;
void* pvReservedM8;
void* pvReservedM7;
void* pvReservedM6;
void* pfnSVC_Handler;
void* pfnDebugMon_Handler;
void* pvReservedM3;
void* pfnPendSV_Handler;
void* pfnSysTick_Handler;
};
/* Symbols exported from linker script */
extern uint32_t __etext ;
extern uint32_t __data_start__ ;
extern uint32_t __data_end__ ;
extern uint32_t __bss_start__ ;
extern uint32_t __bss_end__ ;
extern uint32_t __StackTop;
extern int main(void);
extern void __libc_init_array(void);
/* Exception Table */
__attribute__ ((section(".isr_vector")))
const struct ConstVectors exception_table =
{
/* Configure Initial Stack Pointer, using linker-generated symbols */
.pvStack = (void*) (&__StackTop),
.pfnReset_Handler = (void*) Reset_Handler,
.pfnNMI_Handler = (void*) NMI_Handler,
.pfnHardFault_Handler = (void*) HardFault_Handler,
.pfnMemManage_Handler = (void*) MemManage_Handler,
.pfnBusFault_Handler = (void*) BusFault_Handler,
.pfnUsageFault_Handler = (void*) UsageFault_Handler,
.pvReservedM9 = (void*) (0UL), /* Reserved */
.pvReservedM8 = (void*) (0UL), /* Reserved */
.pvReservedM7 = (void*) (0UL), /* Reserved */
.pvReservedM6 = (void*) (0UL), /* Reserved */
.pfnSVC_Handler = (void*) SVC_Handler,
.pfnDebugMon_Handler = (void*) (0UL),
.pvReservedM3 = (void*) (0UL), /* Reserved */
.pfnPendSV_Handler = (void*) PendSV_Handler,
.pfnSysTick_Handler = (void*) SysTick_Handler,
};
/**
* \brief This is the code that gets called on processor reset.
* Initializes the device and call the main() routine.
*/
void Reset_Handler( void )
{
uint32_t *pSrc, *pDest;
/* Initialize the initialized data section */
pSrc = &__etext;
pDest = &__data_start__;
if ( (&__data_start__ != &__data_end__) && (pSrc != pDest) )
{
for (; pDest < &__data_end__ ; pDest++, pSrc++ )
{
*pDest = *pSrc ;
}
}
/* Clear the zero section */
if ( &__bss_start__ != &__bss_end__ )
{
for ( pDest = &__bss_start__ ; pDest < &__bss_end__ ; pDest++ )
{
*pDest = 0ul ;
}
}
// board_init(); // will be done in main() after app check
/* Initialize the C library */
// __libc_init_array();
main();
while (1);
}
void NMI_Handler(void)
{
__BKPT(14);
while (1);
}
void HardFault_Handler(void)
{
__BKPT(13);
while (1);
}
void MemManage_Handler(void)
{
__BKPT(13);
while (1);
}
void BusFault_Handler(void)
{
__BKPT(13);
while (1);
}
void UsageFault_Handler(void)
{
__BKPT(13);
while (1);
}
void SVC_Handler(void)
{
__BKPT(5);
while (1);
}
void PendSV_Handler(void)
{
__BKPT(2);
while (1);
}

View file

@ -0,0 +1,222 @@
/*
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Linker script to configure memory regions.
* Need modifying for a specific board.
* FLASH.ORIGIN: starting address of flash
* FLASH.LENGTH: length of flash
* RAM.ORIGIN: starting address of RAM bank 0
* RAM.LENGTH: length of RAM bank 0
*/
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x4000 /* First 16KB used by bootloader */
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000-0x0004 /* 4 bytes used by bootloader to keep data between resets */
}
/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
* It references following symbols, which must be defined in code:
* Reset_Handler : Entry of reset handler
*
* It defines following symbols, which code can use without definition:
* __exidx_start
* __exidx_end
* __copy_table_start__
* __copy_table_end__
* __zero_table_start__
* __zero_table_end__
* __etext
* __data_start__
* __preinit_array_start
* __preinit_array_end
* __init_array_start
* __init_array_end
* __fini_array_start
* __fini_array_end
* __data_end__
* __bss_start__
* __bss_end__
* __end__
* end
* __HeapLimit
* __StackLimit
* __StackTop
* __stack
* __sketch_vectors_ptr
*/
ENTRY(Reset_Handler)
SECTIONS
{
. = ORIGIN(FLASH);
.vectors :
{
KEEP(*(.isr_vector))
} > FLASH
.text :
{
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
KEEP(*(.eh_frame*))
} > FLASH
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;
/* To copy multiple ROM to RAM sections,
* uncomment .copy.table section and,
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
/*
.copy.table :
{
. = ALIGN(4);
__copy_table_start__ = .;
LONG (__etext)
LONG (__data_start__)
LONG (__data_end__ - __data_start__)
LONG (__etext2)
LONG (__data2_start__)
LONG (__data2_end__ - __data2_start__)
__copy_table_end__ = .;
} > FLASH
*/
/* To clear multiple BSS sections,
* uncomment .zero.table section and,
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
/*
.zero.table :
{
. = ALIGN(4);
__zero_table_start__ = .;
LONG (__bss_start__)
LONG (__bss_end__ - __bss_start__)
LONG (__bss2_start__)
LONG (__bss2_end__ - __bss2_start__)
__zero_table_end__ = .;
} > FLASH
*/
__etext = .;
PROVIDE(__sketch_vectors_ptr = ORIGIN(FLASH) + LENGTH(FLASH));
.data : AT (__etext)
{
__data_start__ = .;
*(vtable)
*(.data*)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
__data_end__ = .;
} > RAM
.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
.heap (COPY):
{
__end__ = .;
PROVIDE(end = .);
*(.heap*)
__HeapLimit = .;
} > RAM
/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
*(.stack*)
} > RAM
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
__ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ;
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
}

View file

@ -0,0 +1,222 @@
/*
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Linker script to configure memory regions.
* Need modifying for a specific board.
* FLASH.ORIGIN: starting address of flash
* FLASH.LENGTH: length of flash
* RAM.ORIGIN: starting address of RAM bank 0
* RAM.LENGTH: length of RAM bank 0
*/
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x4000 /* First 16KB used by bootloader */
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000-0x0004 /* 4 bytes used by bootloader to keep data between resets */
}
/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
* It references following symbols, which must be defined in code:
* Reset_Handler : Entry of reset handler
*
* It defines following symbols, which code can use without definition:
* __exidx_start
* __exidx_end
* __copy_table_start__
* __copy_table_end__
* __zero_table_start__
* __zero_table_end__
* __etext
* __data_start__
* __preinit_array_start
* __preinit_array_end
* __init_array_start
* __init_array_end
* __fini_array_start
* __fini_array_end
* __data_end__
* __bss_start__
* __bss_end__
* __end__
* end
* __HeapLimit
* __StackLimit
* __StackTop
* __stack
* __sketch_vectors_ptr
*/
ENTRY(Reset_Handler)
SECTIONS
{
. = ORIGIN(FLASH);
.vectors :
{
KEEP(*(.isr_vector))
} > FLASH
.text :
{
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
KEEP(*(.eh_frame*))
} > FLASH
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;
/* To copy multiple ROM to RAM sections,
* uncomment .copy.table section and,
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
/*
.copy.table :
{
. = ALIGN(4);
__copy_table_start__ = .;
LONG (__etext)
LONG (__data_start__)
LONG (__data_end__ - __data_start__)
LONG (__etext2)
LONG (__data2_start__)
LONG (__data2_end__ - __data2_start__)
__copy_table_end__ = .;
} > FLASH
*/
/* To clear multiple BSS sections,
* uncomment .zero.table section and,
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
/*
.zero.table :
{
. = ALIGN(4);
__zero_table_start__ = .;
LONG (__bss_start__)
LONG (__bss_end__ - __bss_start__)
LONG (__bss2_start__)
LONG (__bss2_end__ - __bss2_start__)
__zero_table_end__ = .;
} > FLASH
*/
__etext = .;
PROVIDE(__sketch_vectors_ptr = ORIGIN(FLASH) + LENGTH(FLASH));
.data : AT (__etext)
{
__data_start__ = .;
*(vtable)
*(.data*)
. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
__data_end__ = .;
} > RAM
.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
.heap (COPY):
{
__end__ = .;
PROVIDE(end = .);
*(.heap*)
__HeapLimit = .;
} > RAM
/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
*(.stack*)
} > RAM
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
__ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ;
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
}

View file

@ -0,0 +1,20 @@
#!/bin/bash -ex
BOARD_ID=arduino_zero NAME=samd21_sam_ba make clean all
BOARD_ID=genuino_zero NAME=samd21_sam_ba_genuino make clean all
BOARD_ID=arduino_mkr1000 NAME=samd21_sam_ba_arduino_mkr1000 make clean all
mv -v samd21_sam_ba_arduino_mkr1000.* ../mkr1000/
BOARD_ID=genuino_mkr1000 NAME=samd21_sam_ba_genuino_mkr1000 make clean all
mv -v samd21_sam_ba_genuino_mkr1000.* ../mkr1000/
BOARD_ID=arduino_mkrzero NAME=samd21_sam_ba_arduino_mkrzero make clean all
mv -v samd21_sam_ba_arduino_mkrzero.* ../mkrzero/
BOARD_ID=arduino_mkrfox1200 NAME=samd21_sam_ba_arduino_mkrfox1200 make clean all
mv -v samd21_sam_ba_arduino_mkrfox1200.* ../mkrfox1200/
echo Done building bootloaders!

235
bootloaders/metroM4/main.c Normal file
View file

@ -0,0 +1,235 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdio.h>
#include <sam.h>
#include "sam_ba_monitor.h"
#include "sam_ba_serial.h"
#include "board_definitions.h"
#include "board_driver_led.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
extern uint32_t __sketch_vectors_ptr; // Exported value from linker script
extern void board_init(void);
#if (defined DEBUG) && (DEBUG == 1)
volatile uint32_t* pulSketch_Start_Address;
#endif
static volatile bool main_b_cdc_enable = false;
/**
* \brief Check the application startup condition
*
*/
static void check_start_application(void)
{
// LED_init();
// LED_off();
#if (!defined DEBUG) || ((defined DEBUG) && (DEBUG == 0))
uint32_t* pulSketch_Start_Address;
#endif
/*
* Test sketch stack pointer @ &__sketch_vectors_ptr
* Stay in SAM-BA if value @ (&__sketch_vectors_ptr) == 0xFFFFFFFF (Erased flash cell value)
*/
if (__sketch_vectors_ptr == 0xFFFFFFFF)
{
/* Stay in bootloader */
return;
}
/*
* Load the sketch Reset Handler address
* __sketch_vectors_ptr is exported from linker script and point on first 32b word of sketch vector table
* First 32b word is sketch stack
* Second 32b word is sketch entry point: Reset_Handler()
*/
pulSketch_Start_Address = &__sketch_vectors_ptr ;
pulSketch_Start_Address++ ;
/*
* Test vector table address of sketch @ &__sketch_vectors_ptr
* Stay in SAM-BA if this function is not aligned enough, ie not valid
*/
if ( ((uint32_t)(&__sketch_vectors_ptr) & ~SCB_VTOR_TBLOFF_Msk) != 0x00)
{
/* Stay in bootloader */
return;
}
#if defined(BOOT_DOUBLE_TAP_ADDRESS)
#define DOUBLE_TAP_MAGIC 0xf01669efUL
//if (PM->RCAUSE.bit.POR)
if( RSTC->RCAUSE.bit.POR )
{
/* On power-on initialize double-tap */
BOOT_DOUBLE_TAP_DATA = 0;
}
else
{
if (BOOT_DOUBLE_TAP_DATA == DOUBLE_TAP_MAGIC)
{
/* Second tap, stay in bootloader */
BOOT_DOUBLE_TAP_DATA = 0;
return;
}
/* First tap */
BOOT_DOUBLE_TAP_DATA = DOUBLE_TAP_MAGIC;
/* Wait 0.5sec to see if the user tap reset again.
* The loop value is based on SAMD51 default 48Mhz clock @ reset.
*/
for (uint32_t i=0; i<6000000; i++) /* 500ms */
/* force compiler to not optimize this... */
__asm__ __volatile__("");
/* Timeout happened, continue boot... */
BOOT_DOUBLE_TAP_DATA = 0;
}
#endif
/*
#if defined(BOOT_LOAD_PIN)
volatile PortGroup *boot_port = (volatile PortGroup *)(&(PORT->Group[BOOT_LOAD_PIN / 32]));
volatile bool boot_en;
// Enable the input mode in Boot GPIO Pin
boot_port->DIRCLR.reg = BOOT_PIN_MASK;
boot_port->PINCFG[BOOT_LOAD_PIN & 0x1F].reg = PORT_PINCFG_INEN | PORT_PINCFG_PULLEN;
boot_port->OUTSET.reg = BOOT_PIN_MASK;
// Read the BOOT_LOAD_PIN status
boot_en = (boot_port->IN.reg) & BOOT_PIN_MASK;
// Check the bootloader enable condition
if (!boot_en)
{
// Stay in bootloader
return;
}
#endif
*/
// LED_on();
/* Rebase the Stack Pointer */
__set_MSP( (uint32_t)(__sketch_vectors_ptr) );
/* Rebase the vector table base address */
SCB->VTOR = ((uint32_t)(&__sketch_vectors_ptr) & SCB_VTOR_TBLOFF_Msk);
/* Jump to application Reset Handler in the application */
asm("bx %0"::"r"(*pulSketch_Start_Address));
}
#if DEBUG_ENABLE
# define DEBUG_PIN_HIGH port_pin_set_output_level(BOOT_LED, 1)
# define DEBUG_PIN_LOW port_pin_set_output_level(BOOT_LED, 0)
#else
# define DEBUG_PIN_HIGH do{}while(0)
# define DEBUG_PIN_LOW do{}while(0)
#endif
/**
* \brief SAMDx1 SAM-BA Main loop.
* \return Unused (ANSI-C compatibility).
*/
int main(void)
{
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
P_USB_CDC pCdc;
#endif
DEBUG_PIN_HIGH;
/* Jump in application if condition is satisfied */
check_start_application();
/* We have determined we should stay in the monitor. */
/* System initialization */
board_init();
__enable_irq();
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
/* UART is enabled in all cases */
serial_open();
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
pCdc = usb_init();
#endif
DEBUG_PIN_LOW;
/* Initialize LEDs */
LED_init();
LEDRX_init();
LEDRX_off();
LEDTX_init();
LEDTX_off();
/* Start the sys tick (1 ms) */
SysTick_Config(1000);
/* Wait for a complete enum on usb or a '#' char on serial line */
while (1)
{
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
if (pCdc->IsConfigured(pCdc) != 0)
{
main_b_cdc_enable = true;
}
/* Check if a USB enumeration has succeeded and if comm port has been opened */
if (main_b_cdc_enable)
{
sam_ba_monitor_init(SAM_BA_INTERFACE_USBCDC);
/* SAM-BA on USB loop */
while( 1 )
{
sam_ba_monitor_run();
}
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
/* Check if a '#' has been received */
if (!main_b_cdc_enable && serial_sharp_received())
{
sam_ba_monitor_init(SAM_BA_INTERFACE_USART);
/* SAM-BA on Serial loop */
while(1)
{
sam_ba_monitor_run();
}
}
#endif
}
}
void SysTick_Handler(void)
{
LED_pulse();
sam_ba_monitor_sys_tick();
}

View file

@ -0,0 +1,98 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "sam_ba_cdc.h"
#include "board_driver_usb.h"
usb_cdc_line_coding_t line_coding=
{
115200, // baudrate
0, // 1 Stop Bit
0, // None Parity
8 // 8 Data bits
};
#define pCdc (&sam_ba_cdc)
int cdc_putc(/*P_USB_CDC pCdc,*/ int value)
{
/* Send single byte on USB CDC */
USB_Write(pCdc->pUsb, (const char *)&value, 1, USB_EP_IN);
return 1;
}
int cdc_getc(/*P_USB_CDC pCdc*/void)
{
uint8_t rx_char;
/* Read singly byte on USB CDC */
USB_Read(pCdc->pUsb, (char *)&rx_char, 1);
return (int)rx_char;
}
bool cdc_is_rx_ready(/*P_USB_CDC pCdc*/void)
{
/* Check whether the device is configured */
if ( !USB_IsConfigured(pCdc) )
return 0;
/* Return transfer complete 0 flag status */
return (pCdc->pUsb->DEVICE.DeviceEndpoint[USB_EP_OUT].EPINTFLAG.bit.TRCPT0);
}
uint32_t cdc_write_buf(/*P_USB_CDC pCdc,*/ void const* data, uint32_t length)
{
/* Send the specified number of bytes on USB CDC */
USB_Write(pCdc->pUsb, (const char *)data, length, USB_EP_IN);
return length;
}
uint32_t cdc_read_buf(/*P_USB_CDC pCdc,*/ void* data, uint32_t length)
{
/* Check whether the device is configured */
if ( !USB_IsConfigured(pCdc) )
return 0;
/* Read from USB CDC */
return USB_Read(pCdc->pUsb, (char *)data, length);
}
uint32_t cdc_read_buf_xmd(/*P_USB_CDC pCdc,*/ void* data, uint32_t length)
{
/* Check whether the device is configured */
if ( !USB_IsConfigured(pCdc) )
return 0;
/* Blocking read till specified number of bytes is received */
// XXX: USB_Read_blocking is not reliable
// return USB_Read_blocking(pCdc, (char *)data, length);
char *dst = (char *)data;
uint32_t remaining = length;
while (remaining)
{
uint32_t readed = USB_Read(pCdc->pUsb, (char *)dst, remaining);
remaining -= readed;
dst += readed;
}
return length;
}

View file

@ -0,0 +1,91 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _SAM_BA_USB_CDC_H_
#define _SAM_BA_USB_CDC_H_
#include <stdint.h>
#include "sam_ba_usb.h"
typedef struct
{
uint32_t dwDTERate;
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
} usb_cdc_line_coding_t;
/* CDC Class Specific Request Code */
#define GET_LINE_CODING 0x21A1
#define SET_LINE_CODING 0x2021
#define SET_CONTROL_LINE_STATE 0x2221
extern usb_cdc_line_coding_t line_coding;
/**
* \brief Sends a single byte through USB CDC
*
* \param Data to send
* \return number of data sent
*/
int cdc_putc(/*P_USB_CDC pCdc,*/ int value);
/**
* \brief Reads a single byte through USB CDC
*
* \return Data read through USB
*/
int cdc_getc(/*P_USB_CDC pCdc*/);
/**
* \brief Checks if a character has been received on USB CDC
*
* \return \c 1 if a byte is ready to be read.
*/
bool cdc_is_rx_ready(/*P_USB_CDC pCdc*/);
/**
* \brief Sends buffer on USB CDC
*
* \param data pointer
* \param number of data to send
* \return number of data sent
*/
uint32_t cdc_write_buf(/*P_USB_CDC pCdc,*/ void const* data, uint32_t length);
/**
* \brief Gets data on USB CDC
*
* \param data pointer
* \param number of data to read
* \return number of data read
*/
uint32_t cdc_read_buf(/*P_USB_CDC pCdc,*/ void* data, uint32_t length);
/**
* \brief Gets specified number of bytes on USB CDC
*
* \param data pointer
* \param number of data to read
* \return number of data read
*/
uint32_t cdc_read_buf_xmd(/*P_USB_CDC pCdc,*/ void* data, uint32_t length);
#endif // _SAM_BA_USB_CDC_H_

View file

@ -0,0 +1,552 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "sam.h"
#include <string.h>
#include "sam_ba_monitor.h"
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
#include "board_driver_usb.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#include "board_driver_led.h"
const char RomBOOT_Version[] = SAM_BA_VERSION;
const char RomBOOT_ExtendedCapabilities[] = "[Arduino:XYZ]";
/* Provides one common interface to handle both USART and USB-CDC */
typedef struct
{
/* send one byte of data */
int (*put_c)(int value);
/* Get one byte */
int (*get_c)(void);
/* Receive buffer not empty */
bool (*is_rx_ready)(void);
/* Send given data (polling) */
uint32_t (*putdata)(void const* data, uint32_t length);
/* Get data from comm. device */
uint32_t (*getdata)(void* data, uint32_t length);
/* Send given data (polling) using xmodem (if necessary) */
uint32_t (*putdata_xmd)(void const* data, uint32_t length);
/* Get data from comm. device using xmodem (if necessary) */
uint32_t (*getdata_xmd)(void* data, uint32_t length);
} t_monitor_if;
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
/* Initialize structures with function pointers from supported interfaces */
const t_monitor_if uart_if =
{
.put_c = serial_putc,
.get_c = serial_getc,
.is_rx_ready = serial_is_rx_ready,
.putdata = serial_putdata,
.getdata = serial_getdata,
.putdata_xmd = serial_putdata_xmd,
.getdata_xmd = serial_getdata_xmd
};
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
//Please note that USB doesn't use Xmodem protocol, since USB already includes flow control and data verification
//Data are simply forwarded without further coding.
const t_monitor_if usbcdc_if =
{
.put_c = cdc_putc,
.get_c = cdc_getc,
.is_rx_ready = cdc_is_rx_ready,
.putdata = cdc_write_buf,
.getdata = cdc_read_buf,
.putdata_xmd = cdc_write_buf,
.getdata_xmd = cdc_read_buf_xmd
};
#endif
/* The pointer to the interface object use by the monitor */
t_monitor_if * ptr_monitor_if;
/* b_terminal_mode mode (ascii) or hex mode */
volatile bool b_terminal_mode = false;
volatile bool b_sam_ba_interface_usart = false;
/* Pulse generation counters to keep track of the time remaining for each pulse type */
#define TX_RX_LED_PULSE_PERIOD 100
volatile uint16_t txLEDPulse = 0; // time remaining for Tx LED pulse
volatile uint16_t rxLEDPulse = 0; // time remaining for Rx LED pulse
void sam_ba_monitor_init(uint8_t com_interface)
{
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
//Selects the requested interface for future actions
if (com_interface == SAM_BA_INTERFACE_USART)
{
ptr_monitor_if = (t_monitor_if*) &uart_if;
b_sam_ba_interface_usart = true;
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
if (com_interface == SAM_BA_INTERFACE_USBCDC)
{
ptr_monitor_if = (t_monitor_if*) &usbcdc_if;
}
#endif
}
/*
* Central SAM-BA monitor putdata function using the board LEDs
*/
static uint32_t sam_ba_putdata(t_monitor_if* pInterface, void const* data, uint32_t length)
{
uint32_t result ;
result=pInterface->putdata(data, length);
LEDTX_on();
txLEDPulse = TX_RX_LED_PULSE_PERIOD;
return result;
}
/*
* Central SAM-BA monitor getdata function using the board LEDs
*/
static uint32_t sam_ba_getdata(t_monitor_if* pInterface, void* data, uint32_t length)
{
uint32_t result ;
result=pInterface->getdata(data, length);
if (result)
{
LEDRX_on();
rxLEDPulse = TX_RX_LED_PULSE_PERIOD;
}
return result;
}
/*
* Central SAM-BA monitor putdata function using the board LEDs
*/
static uint32_t sam_ba_putdata_xmd(t_monitor_if* pInterface, void const* data, uint32_t length)
{
uint32_t result ;
result=pInterface->putdata_xmd(data, length);
LEDTX_on();
txLEDPulse = TX_RX_LED_PULSE_PERIOD;
return result;
}
/*
* Central SAM-BA monitor getdata function using the board LEDs
*/
static uint32_t sam_ba_getdata_xmd(t_monitor_if* pInterface, void* data, uint32_t length)
{
uint32_t result ;
result=pInterface->getdata_xmd(data, length);
if (result)
{
LEDRX_on();
rxLEDPulse = TX_RX_LED_PULSE_PERIOD;
}
return result;
}
/**
* \brief This function allows data emission by USART
*
* \param *data Data pointer
* \param length Length of the data
*/
void sam_ba_putdata_term(uint8_t* data, uint32_t length)
{
uint8_t temp, buf[12], *data_ascii;
uint32_t i, int_value;
if (b_terminal_mode)
{
if (length == 4)
int_value = *(uint32_t *) data;
else if (length == 2)
int_value = *(uint16_t *) data;
else
int_value = *(uint8_t *) data;
data_ascii = buf + 2;
data_ascii += length * 2 - 1;
for (i = 0; i < length * 2; i++)
{
temp = (uint8_t) (int_value & 0xf);
if (temp <= 0x9)
*data_ascii = temp | 0x30;
else
*data_ascii = temp + 0x37;
int_value >>= 4;
data_ascii--;
}
buf[0] = '0';
buf[1] = 'x';
buf[length * 2 + 2] = '\n';
buf[length * 2 + 3] = '\r';
sam_ba_putdata(ptr_monitor_if, buf, length * 2 + 4);
}
else
sam_ba_putdata(ptr_monitor_if, data, length);
return;
}
volatile uint32_t sp;
void call_applet(uint32_t address)
{
uint32_t app_start_address;
__disable_irq();
sp = __get_MSP();
/* Rebase the Stack Pointer */
__set_MSP(*(uint32_t *) address);
/* Load the Reset Handler address of the application */
app_start_address = *(uint32_t *)(address + 4);
/* Jump to application Reset Handler in the application */
asm("bx %0"::"r"(app_start_address));
}
uint32_t current_number;
uint32_t i, length;
uint8_t command, *ptr_data, *ptr, data[SIZEBUFMAX];
uint8_t j;
uint32_t u32tmp;
uint32_t PAGE_SIZE, PAGES, MAX_FLASH;
// Prints a 32-bit integer in hex.
static void put_uint32(uint32_t n)
{
char buff[8];
int i;
for (i=0; i<8; i++)
{
int d = n & 0XF;
n = (n >> 4);
buff[7-i] = d > 9 ? 'A' + d - 10 : '0' + d;
}
sam_ba_putdata( ptr_monitor_if, buff, 8);
}
static void sam_ba_monitor_loop(void)
{
length = sam_ba_getdata(ptr_monitor_if, data, SIZEBUFMAX);
ptr = data;
for (i = 0; i < length; i++, ptr++)
{
if (*ptr == 0xff) continue;
if (*ptr == '#')
{
if (b_terminal_mode)
{
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
if (command == 'S')
{
//Check if some data are remaining in the "data" buffer
if(length>i)
{
//Move current indexes to next avail data (currently ptr points to "#")
ptr++;
i++;
//We need to add first the remaining data of the current buffer already read from usb
//read a maximum of "current_number" bytes
if ((length-i) < current_number)
{
u32tmp=(length-i);
}
else
{
u32tmp=current_number;
}
memcpy(ptr_data, ptr, u32tmp);
i += u32tmp;
ptr += u32tmp;
j = u32tmp;
}
//update i with the data read from the buffer
i--;
ptr--;
//Do we expect more data ?
if(j<current_number)
sam_ba_getdata_xmd(ptr_monitor_if, ptr_data, current_number-j);
__asm("nop");
}
else if (command == 'R')
{
sam_ba_putdata_xmd(ptr_monitor_if, ptr_data, current_number);
}
else if (command == 'O')
{
*ptr_data = (char) current_number;
}
else if (command == 'H')
{
*((uint16_t *) ptr_data) = (uint16_t) current_number;
}
else if (command == 'W')
{
*((int *) ptr_data) = current_number;
}
else if (command == 'o')
{
sam_ba_putdata_term(ptr_data, 1);
}
else if (command == 'h')
{
current_number = *((uint16_t *) ptr_data);
sam_ba_putdata_term((uint8_t*) &current_number, 2);
}
else if (command == 'w')
{
current_number = *((uint32_t *) ptr_data);
sam_ba_putdata_term((uint8_t*) &current_number, 4);
}
else if (command == 'G')
{
call_applet(current_number);
/* Rebase the Stack Pointer */
__set_MSP(sp);
__enable_irq();
if (b_sam_ba_interface_usart) {
ptr_monitor_if->put_c(0x6);
}
}
else if (command == 'T')
{
b_terminal_mode = 1;
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
else if (command == 'N')
{
if (b_terminal_mode == 0)
{
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
b_terminal_mode = 0;
}
else if (command == 'V')
{
sam_ba_putdata( ptr_monitor_if, "v", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) RomBOOT_Version, strlen(RomBOOT_Version));
sam_ba_putdata( ptr_monitor_if, " ", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) RomBOOT_ExtendedCapabilities, strlen(RomBOOT_ExtendedCapabilities));
sam_ba_putdata( ptr_monitor_if, " ", 1);
ptr = (uint8_t*) &(__DATE__);
i = 0;
while (*ptr++ != '\0')
i++;
sam_ba_putdata( ptr_monitor_if, (uint8_t *) &(__DATE__), i);
sam_ba_putdata( ptr_monitor_if, " ", 1);
i = 0;
ptr = (uint8_t*) &(__TIME__);
while (*ptr++ != '\0')
i++;
sam_ba_putdata( ptr_monitor_if, (uint8_t *) &(__TIME__), i);
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
else if (command == 'X')
{
// Syntax: X[ADDR]#
// Erase the flash memory starting from ADDR to the end of flash.
//block size 16 pages
uint32_t dst_addr = current_number; // starting address
while (dst_addr < MAX_FLASH)
{
while (NVMCTRL->STATUS.bit.READY == 0);
// Execute "EB" Erase Block
NVMCTRL->ADDR.reg = dst_addr;
NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_EB;
while (NVMCTRL->STATUS.bit.READY == 0);
dst_addr += PAGE_SIZE * 16; // Skip a block
}
// Notify command completed
sam_ba_putdata( ptr_monitor_if, "X\n\r", 3);
}
else if (command == 'Y')
{
// This command writes the content of a buffer in SRAM into flash memory.
// Syntax: Y[ADDR],0#
// Set the starting address of the SRAM buffer.
// Syntax: Y[ROM_ADDR],[SIZE]#
// Write the first SIZE bytes from the SRAM buffer (previously set) into
// flash memory starting from address ROM_ADDR
static uint32_t *src_buff_addr = NULL;
if (current_number == 0)
{
// Set buffer address
src_buff_addr = (uint32_t*)ptr_data;
}
else
{
// Write to flash
uint32_t size = current_number/4;
uint32_t *src_addr = src_buff_addr;
uint32_t *dst_addr = (uint32_t*)ptr_data;
// Set automatic page write
NVMCTRL->CTRLA.reg |= NVMCTRL_CTRLA_WMODE(NVMCTRL_CTRLA_WMODE_AP);
// Do writes in pages
while (size)
{
// Execute "PBC" Page Buffer Clear
NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_PBC;
while (NVMCTRL->STATUS.bit.READY == 0)
;
// Fill page buffer
uint32_t i;
for (i=0; i<(PAGE_SIZE/4) && i<size; i++)
{
dst_addr[i] = src_addr[i];
}
// Execute "WP" Write Page
NVMCTRL->ADDR.reg = ((uint32_t)dst_addr);
NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_WP;
while (NVMCTRL->STATUS.bit.READY == 0)
;
// Advance to next page
dst_addr += i;
src_addr += i;
size -= i;
}
}
// Notify command completed
sam_ba_putdata( ptr_monitor_if, "Y\n\r", 3);
}
else if (command == 'Z')
{
// This command calculate CRC for a given area of memory.
// It's useful to quickly check if a transfer has been done
// successfully.
// Syntax: Z[START_ADDR],[SIZE]#
// Returns: Z[CRC]#
uint8_t *data = (uint8_t *)ptr_data;
uint32_t size = current_number;
uint16_t crc = 0;
uint32_t i = 0;
for (i=0; i<size; i++)
crc = serial_add_crc(*data++, crc);
// Send response
sam_ba_putdata( ptr_monitor_if, "Z", 1);
put_uint32(crc);
sam_ba_putdata( ptr_monitor_if, "#\n\r", 3);
}
command = 'z';
current_number = 0;
if (b_terminal_mode)
{
sam_ba_putdata( ptr_monitor_if, ">", 1);
}
}
else
{
if (('0' <= *ptr) && (*ptr <= '9'))
{
current_number = (current_number << 4) | (*ptr - '0');
}
else if (('A' <= *ptr) && (*ptr <= 'F'))
{
current_number = (current_number << 4) | (*ptr - 'A' + 0xa);
}
else if (('a' <= *ptr) && (*ptr <= 'f'))
{
current_number = (current_number << 4) | (*ptr - 'a' + 0xa);
}
else if (*ptr == ',')
{
ptr_data = (uint8_t *) current_number;
current_number = 0;
}
else
{
command = *ptr;
current_number = 0;
}
}
}
}
void sam_ba_monitor_sys_tick(void)
{
/* Check whether the TX or RX LED one-shot period has elapsed. if so, turn off the LED */
if (txLEDPulse && !(--txLEDPulse))
LEDTX_off();
if (rxLEDPulse && !(--rxLEDPulse))
LEDRX_off();
}
/**
* \brief This function starts the SAM-BA monitor.
*/
void sam_ba_monitor_run(void)
{
uint32_t pageSizes[] = { 8, 16, 32, 64, 128, 256, 512, 1024 };
PAGE_SIZE = pageSizes[NVMCTRL->PARAM.bit.PSZ];
PAGES = NVMCTRL->PARAM.bit.NVMP;
MAX_FLASH = PAGE_SIZE * PAGES;
ptr_data = NULL;
command = 'z';
while (1)
{
sam_ba_monitor_loop();
}
}

View file

@ -0,0 +1,72 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _MONITOR_SAM_BA_H_
#define _MONITOR_SAM_BA_H_
#define SAM_BA_VERSION "2.0"
/* Enable the interfaces to save code size */
#define SAM_BA_BOTH_INTERFACES 0
#define SAM_BA_UART_ONLY 1
#define SAM_BA_USBCDC_ONLY 2
#ifndef SAM_BA_INTERFACE
#define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES
#endif
/* Selects USB as the communication interface of the monitor */
#define SAM_BA_INTERFACE_USBCDC 0
/* Selects USART as the communication interface of the monitor */
#define SAM_BA_INTERFACE_USART 1
/* Selects USB as the communication interface of the monitor */
#define SIZEBUFMAX 64
/**
* \brief Initialize the monitor
*
*/
void sam_ba_monitor_init(uint8_t com_interface);
/**
* \brief System tick function of the SAM-BA Monitor
*
*/
void sam_ba_monitor_sys_tick(void);
/**
* \brief Main function of the SAM-BA Monitor
*
*/
void sam_ba_monitor_run(void);
/**
* \brief
*
*/
void sam_ba_putdata_term(uint8_t* data, uint32_t length);
/**
* \brief
*
*/
void call_applet(uint32_t address);
#endif // _MONITOR_SAM_BA_H_

View file

@ -0,0 +1,529 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <sam.h>
#include "board_definitions.h"
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
/* Local reference to current Usart instance in use with this driver */
//struct usart_module usart_sam_ba;
/* Variable to let the main task select the appropriate communication interface */
volatile uint8_t b_sharp_received;
/* RX and TX Buffers + rw pointers for each buffer */
volatile uint8_t buffer_rx_usart[USART_BUFFER_SIZE];
volatile uint8_t idx_rx_read;
volatile uint8_t idx_rx_write;
volatile uint8_t buffer_tx_usart[USART_BUFFER_SIZE];
volatile uint8_t idx_tx_read;
volatile uint8_t idx_tx_write;
/* Test for timeout in AT91F_GetChar */
uint8_t error_timeout;
uint16_t size_of_data;
uint8_t mode_of_transfer;
#define BOOT_USART_PAD(n) BOOT_USART_PAD##n
#define GPIO_PIN(n) (((n)&0x1Fu) << 0)
#define GPIO_PORT(n) ((n) >> 5)
/**
* \brief Open the given USART
*/
void serial_open(void)
{
uint32_t port;
uint32_t pin;
GCLK->PCHCTRL[BOOT_GCLK_ID_CORE].reg = GCLK_PCHCTRL_GEN_GCLK0_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
GCLK->PCHCTRL[BOOT_GCLK_ID_SLOW].reg = GCLK_PCHCTRL_GEN_GCLK3_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
MCLK->BOOK_USART_MASK.reg |= BOOT_USART_BUS_CLOCK_INDEX ;
/* Configure the port pins for SERCOM_USART */
if (BOOT_USART_PAD0 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD0 & 0x200000) >> 21;
pin = (BOOT_USART_PAD0 >> 16);
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD0 & 0xFF) << (4 * (pin & 0x01u));
}
if (BOOT_USART_PAD1 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD1 & 0x200000) >> 21;
pin = BOOT_USART_PAD1 >> 16;
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD1 & 0xFF) << (4 * (pin & 0x01u));
}
if (BOOT_USART_PAD2 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD2 & 0x200000) >> 21;
pin = BOOT_USART_PAD2 >> 16;
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD2 & 0xFF) << (4 * (pin & 0x01u));
}
if (BOOT_USART_PAD3 != PINMUX_UNUSED)
{
/* Mask 6th bit in pin number to check whether it is greater than 32 i.e., PORTB pin */
port = (BOOT_USART_PAD3 & 0x200000) >> 21;
pin = BOOT_USART_PAD3 >> 16;
PORT->Group[port].PINCFG[(pin - (port*32))].bit.PMUXEN = 1;
PORT->Group[port].PMUX[(pin - (port*32))/2].reg &= ~(0xF << (4 * (pin & 0x01u)));
PORT->Group[port].PMUX[(pin - (port*32))/2].reg |= (BOOT_USART_PAD3 & 0xFF) << (4 * (pin & 0x01u));
}
/* Baud rate 115200 - clock 48MHz -> BAUD value-63018 */
uart_basic_init(BOOT_USART_MODULE, 63018, BOOT_USART_PAD_SETTINGS);
//Initialize flag
b_sharp_received = false;
idx_rx_read = 0;
idx_rx_write = 0;
idx_tx_read = 0;
idx_tx_write = 0;
error_timeout = 0;
}
/**
* \brief Close communication line
*/
void serial_close(void)
{
uart_disable(BOOT_USART_MODULE);
}
/**
* \brief Puts a byte on usart line
* The type int is used to support printf redirection from compiler LIB.
*
* \param value Value to put
*
* \return \c 1 if function was successfully done, otherwise \c 0.
*/
int serial_putc(int value)
{
uart_write_byte(BOOT_USART_MODULE, (uint8_t)value);
return 1;
}
int serial_getc(void)
{
uint16_t retval;
//Wait until input buffer is filled
while(!(serial_is_rx_ready()));
retval = (uint16_t)uart_read_byte(BOOT_USART_MODULE);
//usart_read_wait(&usart_sam_ba, &retval);
return (int)retval;
}
int serial_sharp_received(void)
{
if (serial_is_rx_ready())
{
if (serial_getc() == SHARP_CHARACTER)
return (true);
}
return (false);
}
bool serial_is_rx_ready(void)
{
return (BOOT_USART_MODULE->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_RXC);
}
int serial_readc(void)
{
int retval;
retval = buffer_rx_usart[idx_rx_read];
idx_rx_read = (idx_rx_read + 1) & (USART_BUFFER_SIZE - 1);
return (retval);
}
//Send given data (polling)
uint32_t serial_putdata(void const* data, uint32_t length)
{
uint32_t i;
uint8_t* ptrdata;
ptrdata = (uint8_t*) data;
for (i = 0; i < length; i++)
{
serial_putc(*ptrdata);
ptrdata++;
}
return (i);
}
//Get data from comm. device
uint32_t serial_getdata(void* data, uint32_t length)
{
uint8_t* ptrdata;
ptrdata = (uint8_t*) data;
*ptrdata = serial_getc();
return (1);
}
static const uint16_t crc16Table[256]=
{
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};
//*----------------------------------------------------------------------------
//* \brief Compute the CRC
//*----------------------------------------------------------------------------
unsigned short serial_add_crc(char ptr, unsigned short crc)
{
return (crc << 8) ^ crc16Table[((crc >> 8) ^ ptr) & 0xff];
}
//*----------------------------------------------------------------------------
//* \brief
//*----------------------------------------------------------------------------
static uint16_t getbytes(uint8_t *ptr_data, uint16_t length)
{
uint16_t crc = 0;
uint16_t cpt;
uint8_t c;
for (cpt = 0; cpt < length; ++cpt)
{
c = serial_getc();
if (error_timeout)
return 1;
crc = serial_add_crc(c, crc);
//crc = (crc << 8) ^ xcrc16tab[(crc>>8) ^ c];
if (size_of_data || mode_of_transfer)
{
*ptr_data++ = c;
if (length == PKTLEN_128)
size_of_data--;
}
}
return crc;
}
//*----------------------------------------------------------------------------
//* \brief Used by Xup to send packets.
//*----------------------------------------------------------------------------
static int putPacket(uint8_t *tmppkt, uint8_t sno)
{
uint32_t i;
uint16_t chksm;
uint8_t data;
chksm = 0;
serial_putc(SOH);
serial_putc(sno);
serial_putc((uint8_t) ~(sno));
for (i = 0; i < PKTLEN_128; i++)
{
if (size_of_data || mode_of_transfer)
{
data = *tmppkt++;
size_of_data--;
}
else
data = 0x00;
serial_putc(data);
//chksm = (chksm<<8) ^ xcrc16tab[(chksm>>8)^data];
chksm = serial_add_crc(data, chksm);
}
/* An "endian independent way to extract the CRC bytes. */
serial_putc((uint8_t) (chksm >> 8));
serial_putc((uint8_t) chksm);
return (serial_getc()); /* Wait for ack */
}
//*----------------------------------------------------------------------------
//* \brief Called when a transfer from target to host is being made (considered
//* an upload).
//*----------------------------------------------------------------------------
//Send given data (polling) using xmodem (if necessary)
uint32_t serial_putdata_xmd(void const* data, uint32_t length)
{
uint8_t c, sno = 1;
uint8_t done;
uint8_t * ptr_data = (uint8_t *) data;
error_timeout = 0;
if (!length)
mode_of_transfer = 1;
else
{
size_of_data = length;
mode_of_transfer = 0;
}
if (length & (PKTLEN_128 - 1))
{
length += PKTLEN_128;
length &= ~(PKTLEN_128 - 1);
}
/* Startup synchronization... */
/* Wait to receive a NAK or 'C' from receiver. */
done = 0;
while (!done) {
c = (uint8_t) serial_getc();
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
c = (uint8_t) serial_getc();
if (error_timeout)
{
error_timeout = 0;
return (0);
}
}
switch (c)
{
case NAK:
done = 1;
// ("CSM");
break;
case 'C':
done = 1;
// ("CRC");
break;
case 'q': /* ELS addition, not part of XMODEM spec. */
return (0);
default:
break;
}
}
done = 0;
sno = 1;
while (!done)
{
c = (uint8_t) putPacket((uint8_t *) ptr_data, sno);
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
return (0);
}
switch (c)
{
case ACK:
++sno;
length -= PKTLEN_128;
ptr_data += PKTLEN_128;
// ("A");
break;
case NAK:
// ("N");
break;
case CAN:
case EOT:
default:
done = 0;
break;
}
if (!length)
{
serial_putc(EOT);
serial_getc(); /* Flush the ACK */
break;
}
// ("!");
}
mode_of_transfer = 0;
// ("Xup_done.");
return (1);
// return(0);
}
/*----------------------------------------------------------------------------
* \brief Used by serial_getdata_xmd to retrieve packets.
*/
static uint8_t getPacket(uint8_t *ptr_data, uint8_t sno)
{
uint8_t seq[2];
uint16_t crc, xcrc;
getbytes(seq, 2);
xcrc = getbytes(ptr_data, PKTLEN_128);
if (error_timeout)
return (false);
/* An "endian independent way to combine the CRC bytes. */
crc = (uint16_t) serial_getc() << 8;
crc += (uint16_t) serial_getc();
if (error_timeout == 1)
return (false);
if ((crc != xcrc) || (seq[0] != sno) || (seq[1] != (uint8_t) (~sno)))
{
serial_putc(CAN);
return (false);
}
serial_putc(ACK);
return (true);
}
//*----------------------------------------------------------------------------
//* \brief Called when a transfer from host to target is being made (considered
//* an download).
//*----------------------------------------------------------------------------
//Get data from comm. device using xmodem (if necessary)
uint32_t serial_getdata_xmd(void* data, uint32_t length)
{
uint32_t timeout;
char c;
uint8_t * ptr_data = (uint8_t *) data;
uint32_t b_run, nbr_of_timeout = 100;
uint8_t sno = 0x01;
uint32_t data_transfered = 0;
//Copied from legacy source code ... might need some tweaking
uint32_t loops_per_second = CPU_FREQUENCY/60;
error_timeout = 0;
if (length == 0)
mode_of_transfer = 1;
else
{
size_of_data = length;
mode_of_transfer = 0;
}
/* Startup synchronization... */
/* Continuously send NAK or 'C' until sender responds. */
// ("Xdown");
while (1)
{
serial_putc('C');
timeout = loops_per_second;
while (!(serial_is_rx_ready()) && timeout)
timeout--;
if (timeout)
break;
if (!(--nbr_of_timeout))
return (0);
// return -1;
}
b_run = true;
// ("Got response");
while (b_run != false)
{
c = (char) serial_getc();
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
return (0);
// return (-1);
}
switch (c)
{
case SOH: /* 128-byte incoming packet */
// ("O");
b_run = getPacket(ptr_data, sno);
if (error_timeout)
{ // Test for timeout in serial_getc
error_timeout = 0;
return (0);
// return (-1);
}
if (b_run == true)
{
++sno;
ptr_data += PKTLEN_128;
data_transfered += PKTLEN_128;
}
break;
case EOT: // ("E");
serial_putc(ACK);
b_run = false;
break;
case CAN: // ("C");
case ESC: /* "X" User-invoked abort */
default:
b_run = false;
break;
}
// ("!");
}
mode_of_transfer = 0;
return (true);
// return(b_run);
}

View file

@ -0,0 +1,143 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _SAM_BA_SERIAL_H_
#define _SAM_BA_SERIAL_H_
#include <stdint.h>
#include <stdbool.h>
/* USART buffer size (must be a power of two) */
#define USART_BUFFER_SIZE (128)
/* Define the default time-out value for USART. */
#define USART_DEFAULT_TIMEOUT (1000)
/* Xmodem related defines */
/* CRC16 polynomial */
#define CRC16POLY (0x1021)
#define SHARP_CHARACTER '#'
/* X/Ymodem protocol: */
#define SOH (0x01)
//#define STX (0x02)
#define EOT (0x04)
#define ACK (0x06)
#define NAK (0x15)
#define CAN (0x18)
#define ESC (0x1b)
#define PKTLEN_128 (128)
/**
* \brief Open the given USART
*/
void serial_open(void);
/**
* \brief Stops the USART
*/
void serial_close(void);
/**
* \brief Puts a byte on usart line
*
* \param value Value to put
*
* \return \c 1 if function was successfully done, otherwise \c 0.
*/
int serial_putc(int value);
/**
* \brief Waits and gets a value on usart line
*
* \return value read on usart line
*/
int serial_getc(void);
/**
* \brief Returns true if the SAM-BA Uart received the sharp char
*
* \return Returns true if the SAM-BA Uart received the sharp char
*/
int serial_sharp_received(void);
/**
* \brief This function checks if a character has been received on the usart line
*
* \return \c 1 if a byte is ready to be read.
*/
bool serial_is_rx_ready(void);
/**
* \brief Gets a value on usart line
*
* \return value read on usart line
*/
int serial_readc(void);
/**
* \brief Send buffer on usart line
*
* \param data pointer
* \param number of data to send
* \return number of data sent
*/
uint32_t serial_putdata(void const* data, uint32_t length); //Send given data (polling)
/**
* \brief Gets data from usart line
*
* \param data pointer
* \param number of data to get
* \return value read on usart line
*/
uint32_t serial_getdata(void* data, uint32_t length); //Get data from comm. device
/**
* \brief Send buffer on usart line using Xmodem protocol
*
* \param data pointer
* \param number of data to send
* \return number of data sent
*/
uint32_t serial_putdata_xmd(void const* data, uint32_t length); //Send given data (polling) using xmodem (if necessary)
/**
* \brief Gets data from usart line using Xmodem protocol
*
* \param data pointer
* \param number of data to get
* \return value read on usart line
*/
uint32_t serial_getdata_xmd(void* data, uint32_t length); //Get data from comm. device using xmodem (if necessary)
/**
* \brief Compute the CRC
*
* \param Char to add to CRC
* \param Previous CRC
* \return The new computed CRC
*/
unsigned short serial_add_crc(char c, unsigned short crc);
#endif // _SAM_BA_SERIAL_H_

View file

@ -0,0 +1,436 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdint.h>
#include <string.h>
#include "board_definitions.h"
#include "sam_ba_usb.h"
#include "board_driver_usb.h"
#include "sam_ba_cdc.h"
/* This data array will be copied into SRAM as its length is inferior to 64 bytes,
* and so can stay in flash.
*/
static __attribute__((__aligned__(4)))
const char devDescriptor[] =
{
/* Device descriptor */
0x12, // bLength
0x01, // bDescriptorType
0x00, // bcdUSB L
0x02, // bcdUSB H
0x02, // bDeviceClass: CDC class code
0x00, // bDeviceSubclass: CDC class sub code
0x00, // bDeviceProtocol: CDC Device protocol
0x40, // bMaxPacketSize0
USB_VID_LOW, // idVendor L
USB_VID_HIGH, // idVendor H
USB_PID_LOW, // idProduct L
USB_PID_HIGH, // idProduct H
0x00, // bcdDevice L, here matching SAM-BA version
0x02, // bcdDevice H
STRING_INDEX_MANUFACTURER, // iManufacturer
STRING_INDEX_PRODUCT, // iProduct
0x00, // SerialNumber, should be based on product unique ID
0x01 // bNumConfigs
};
/* This data array will be consumed directly by USB_Write() and must be in SRAM.
* We cannot send data from product internal flash.
*/
static __attribute__((__aligned__(4)))
char cfgDescriptor[] =
{
/* ============== CONFIGURATION 1 =========== */
/* Configuration 1 descriptor */
0x09, // CbLength
0x02, // CbDescriptorType
0x43, // CwTotalLength 2 EP + Control
0x00,
0x02, // CbNumInterfaces
0x01, // CbConfigurationValue
0x00, // CiConfiguration
0x80, // CbmAttributes Bus powered without remote wakeup: 0x80, Self powered without remote wakeup: 0xc0
0x32, // CMaxPower, report using 100mA, enough for a bootloader
/* Communication Class Interface Descriptor Requirement */
0x09, // bLength
0x04, // bDescriptorType
0x00, // bInterfaceNumber
0x00, // bAlternateSetting
0x01, // bNumEndpoints
0x02, // bInterfaceClass
0x02, // bInterfaceSubclass
0x00, // bInterfaceProtocol
0x00, // iInterface
/* Header Functional Descriptor */
0x05, // bFunction Length
0x24, // bDescriptor type: CS_INTERFACE
0x00, // bDescriptor subtype: Header Func Desc
0x10, // bcdCDC:1.1
0x01,
/* ACM Functional Descriptor */
0x04, // bFunctionLength
0x24, // bDescriptor Type: CS_INTERFACE
0x02, // bDescriptor Subtype: ACM Func Desc
0x00, // bmCapabilities
/* Union Functional Descriptor */
0x05, // bFunctionLength
0x24, // bDescriptorType: CS_INTERFACE
0x06, // bDescriptor Subtype: Union Func Desc
0x00, // bMasterInterface: Communication Class Interface
0x01, // bSlaveInterface0: Data Class Interface
/* Call Management Functional Descriptor */
0x05, // bFunctionLength
0x24, // bDescriptor Type: CS_INTERFACE
0x01, // bDescriptor Subtype: Call Management Func Desc
0x00, // bmCapabilities: D1 + D0
0x01, // bDataInterface: Data Class Interface 1
/* Endpoint 1 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x83, // bEndpointAddress, Endpoint 03 - IN
0x03, // bmAttributes INT
0x08, // wMaxPacketSize
0x00,
0xFF, // bInterval
/* Data Class Interface Descriptor Requirement */
0x09, // bLength
0x04, // bDescriptorType
0x01, // bInterfaceNumber
0x00, // bAlternateSetting
0x02, // bNumEndpoints
0x0A, // bInterfaceClass
0x00, // bInterfaceSubclass
0x00, // bInterfaceProtocol
0x00, // iInterface
/* First alternate setting */
/* Endpoint 1 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x81, // bEndpointAddress, Endpoint 01 - IN
0x02, // bmAttributes BULK
USB_EP_IN_SIZE, // wMaxPacketSize
0x00,
0x00, // bInterval
/* Endpoint 2 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x02, // bEndpointAddress, Endpoint 02 - OUT
0x02, // bmAttributes BULK
USB_EP_OUT_SIZE, // wMaxPacketSize
0x00,
0x00 // bInterval
};
#ifndef STRING_MANUFACTURER
# define STRING_MANUFACTURER "Arduino LLC"
#endif
#ifndef STRING_PRODUCT
# define STRING_PRODUCT "Arduino Zero"
#endif
USB_CDC sam_ba_cdc;
/*----------------------------------------------------------------------------
* \brief This function is a callback invoked when a SETUP packet is received
*/
void sam_ba_usb_CDC_Enumerate(P_USB_CDC pCdc)
{
Usb *pUsb = pCdc->pUsb;
static volatile uint8_t bmRequestType, bRequest, dir;
static volatile uint16_t wValue, wIndex, wLength, wStatus;
/* Clear the Received Setup flag */
pUsb->DEVICE.DeviceEndpoint[0].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_RXSTP;
/* Read the USB request parameters */
bmRequestType = udd_ep_out_cache_buffer[0][0];
bRequest = udd_ep_out_cache_buffer[0][1];
wValue = (udd_ep_out_cache_buffer[0][2] & 0xFF);
wValue |= (udd_ep_out_cache_buffer[0][3] << 8);
wIndex = (udd_ep_out_cache_buffer[0][4] & 0xFF);
wIndex |= (udd_ep_out_cache_buffer[0][5] << 8);
wLength = (udd_ep_out_cache_buffer[0][6] & 0xFF);
wLength |= (udd_ep_out_cache_buffer[0][7] << 8);
/* Clear the Bank 0 ready flag on Control OUT */
pUsb->DEVICE.DeviceEndpoint[0].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK0RDY;
/* Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1 */
switch ((bRequest << 8) | bmRequestType)
{
case STD_GET_DESCRIPTOR:
if (wValue>>8 == STD_GET_DESCRIPTOR_DEVICE)
{
/* Return Device Descriptor */
USB_Write(pCdc->pUsb, devDescriptor, SAM_BA_MIN(sizeof(devDescriptor), wLength), USB_EP_CTRL);
}
else if (wValue>>8 == STD_GET_DESCRIPTOR_CONFIGURATION)
{
/* Return Configuration Descriptor */
USB_Write(pCdc->pUsb, cfgDescriptor, SAM_BA_MIN(sizeof(cfgDescriptor), wLength), USB_EP_CTRL);
}
else if (wValue>>8 == STD_GET_DESCRIPTOR_STRING)
{
switch ( wValue & 0xff )
{
case STRING_INDEX_LANGUAGES: {
uint16_t STRING_LANGUAGE[2] = { (STD_GET_DESCRIPTOR_STRING<<8) | 4, 0x0409 };
USB_Write(pCdc->pUsb, (const char*)STRING_LANGUAGE, SAM_BA_MIN(sizeof(STRING_LANGUAGE), wLength), USB_EP_CTRL);
}
break;
case STRING_INDEX_MANUFACTURER:
USB_SendString(pCdc->pUsb, STRING_MANUFACTURER, wLength );
break;
case STRING_INDEX_PRODUCT:
USB_SendString(pCdc->pUsb, STRING_PRODUCT, wLength );
break;
default:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
}
}
else
{
/* Stall the request */
USB_SendStall(pUsb, true);
}
break;
case STD_SET_ADDRESS:
/* Send ZLP */
USB_SendZlp(pUsb);
/* Set device address to the newly received address from host */
USB_SetAddress(pCdc->pUsb, wValue);
break;
case STD_SET_CONFIGURATION:
/* Store configuration */
pCdc->currentConfiguration = (uint8_t)wValue;
/* Send ZLP */
USB_SendZlp(pUsb);
/* Configure the 3 needed endpoints */
USB_Configure(pUsb);
break;
case STD_GET_CONFIGURATION:
/* Return current configuration value */
USB_Write(pCdc->pUsb, (char *) &(pCdc->currentConfiguration), sizeof(pCdc->currentConfiguration), USB_EP_CTRL);
break;
case STD_GET_STATUS_ZERO:
wStatus = 0;
USB_Write(pCdc->pUsb, (char *) &wStatus, sizeof(wStatus), USB_EP_CTRL);
break;
case STD_GET_STATUS_INTERFACE:
wStatus = 0;
USB_Write(pCdc->pUsb, (char *) &wStatus, sizeof(wStatus), USB_EP_CTRL);
break;
case STD_GET_STATUS_ENDPOINT:
wStatus = 0;
dir = wIndex & 80;
wIndex &= 0x0F;
if (wIndex <= 3)
{
if (dir)
{
wStatus = (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.reg & USB_DEVICE_EPSTATUSSET_STALLRQ1) ? 1 : 0;
}
else
{
wStatus = (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.reg & USB_DEVICE_EPSTATUSSET_STALLRQ0) ? 1 : 0;
}
/* Return current status of endpoint */
USB_Write(pCdc->pUsb, (char *) &wStatus, sizeof(wStatus), USB_EP_CTRL);
}
else
{
/* Stall the request */
USB_SendStall(pUsb, true);
}
break;
case STD_SET_FEATURE_ZERO:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
case STD_SET_FEATURE_INTERFACE:
/* Send ZLP */
USB_SendZlp(pUsb);
break;
case STD_SET_FEATURE_ENDPOINT:
dir = wIndex & 0x80;
wIndex &= 0x0F;
if ((wValue == 0) && wIndex && (wIndex <= 3))
{
/* Set STALL request for the endpoint */
if (dir)
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_STALLRQ1;
}
else
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_STALLRQ0;
}
/* Send ZLP */
USB_SendZlp(pUsb);
}
else
{
/* Stall the request */
USB_SendStall(pUsb, true);
}
break;
case STD_SET_INTERFACE:
case STD_CLEAR_FEATURE_ZERO:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
case STD_CLEAR_FEATURE_INTERFACE:
/* Send ZLP */
USB_SendZlp(pUsb);
break;
case STD_CLEAR_FEATURE_ENDPOINT:
dir = wIndex & 0x80;
wIndex &= 0x0F;
if ((wValue == 0) && wIndex && (wIndex <= 3))
{
if (dir)
{
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.bit.STALLRQ1)
{
// Remove stall request
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_STALLRQ1;
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.bit.STALL1)
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL1;
// The Stall has occurred, then reset data toggle
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSSET_DTGLIN;
}
}
}
else
{
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUS.bit.STALLRQ0)
{
// Remove stall request
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_STALLRQ0;
if (pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.bit.STALL0)
{
pUsb->DEVICE.DeviceEndpoint[wIndex].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL0;
// The Stall has occurred, then reset data toggle
pUsb->DEVICE.DeviceEndpoint[wIndex].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSSET_DTGLOUT;
}
}
}
/* Send ZLP */
USB_SendZlp(pUsb);
}
else
{
USB_SendStall(pUsb, true);
}
break;
// handle CDC class requests
case SET_LINE_CODING:
/* Send ZLP */
USB_SendZlp(pUsb);
break;
case GET_LINE_CODING:
/* Send current line coding */
USB_Write(pCdc->pUsb, (char *) &line_coding, SAM_BA_MIN(sizeof(usb_cdc_line_coding_t), wLength), USB_EP_CTRL);
break;
case SET_CONTROL_LINE_STATE:
/* Store the current connection */
pCdc->currentConnection = wValue;
/* Send ZLP */
USB_SendZlp(pUsb);
break;
default:
/* Stall the request */
USB_SendStall(pUsb, true);
break;
}
}
/*----------------------------------------------------------------------------
* \brief
*/
P_USB_CDC usb_init(void)
{
sam_ba_cdc.pUsb = USB;
/* Initialize USB */
USB_Init();
/* Get the default CDC structure settings */
USB_Open(&sam_ba_cdc, sam_ba_cdc.pUsb);
return &sam_ba_cdc;
}
/*----------------------------------------------------------------------------
* \brief Send a USB descriptor string.
*
* The input string is plain ASCII but is sent out as UTF-16 with the correct 2-byte prefix.
*/
uint32_t USB_SendString(Usb *pUsb, const char* ascii_string, uint8_t maxLength)
{
uint8_t string_descriptor[255]; // Max USB-allowed string length
uint16_t* unicode_string=(uint16_t*)(string_descriptor+2); // point on 3 bytes of descriptor
int resulting_length;
string_descriptor[0] = (strlen(ascii_string)<<1) + 2;
string_descriptor[1] = STD_GET_DESCRIPTOR_STRING;
for ( resulting_length = 1 ; *ascii_string && (resulting_length<maxLength>>1) ; resulting_length++ )
{
*unicode_string++ = (uint16_t)(*ascii_string++);
}
return USB_Write(pUsb, (const char*)string_descriptor, resulting_length<<1, USB_EP_CTRL);
}

View file

@ -0,0 +1,103 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef CDC_ENUMERATE_H
#define CDC_ENUMERATE_H
#include <sam.h>
#include <stdbool.h>
#define USB_EP_CTRL (0u)
#define USB_EP_OUT (2u)
#define USB_EP_OUT_SIZE (0x40u)
#define USB_EP_IN (1u)
#define USB_EP_IN_SIZE (0x40u)
#define USB_EP_COMM (3u)
#define MAX_EP (4u)
/* USB standard request code */
#define STD_GET_STATUS_ZERO (0x0080u)
#define STD_GET_STATUS_INTERFACE (0x0081u)
#define STD_GET_STATUS_ENDPOINT (0x0082u)
#define STD_CLEAR_FEATURE_ZERO (0x0100u)
#define STD_CLEAR_FEATURE_INTERFACE (0x0101u)
#define STD_CLEAR_FEATURE_ENDPOINT (0x0102u)
#define STD_SET_FEATURE_ZERO (0x0300u)
#define STD_SET_FEATURE_INTERFACE (0x0301u)
#define STD_SET_FEATURE_ENDPOINT (0x0302u)
#define STD_SET_ADDRESS (0x0500u)
#define STD_GET_DESCRIPTOR (0x0680u)
#define STD_SET_DESCRIPTOR (0x0700u)
#define STD_GET_CONFIGURATION (0x0880u)
#define STD_SET_CONFIGURATION (0x0900u)
#define STD_GET_INTERFACE (0x0A81u)
#define STD_SET_INTERFACE (0x0B01u)
#define STD_SYNCH_FRAME (0x0C82u)
#define STD_GET_DESCRIPTOR_DEVICE (1u)
#define STD_GET_DESCRIPTOR_CONFIGURATION (2u)
#define STD_GET_DESCRIPTOR_STRING (3u)
#define STD_GET_DESCRIPTOR_INTERFACE (4u)
#define STD_GET_DESCRIPTOR_ENDPOINT (5u)
#define STD_GET_DESCRIPTOR_DEVICE_QUALIFIER (6u)
#define STD_GET_DESCRIPTOR_OTHER_SPEED_CONFIGURATION (7u)
#define STD_GET_DESCRIPTOR_INTERFACE_POWER1 (8u)
#define FEATURE_ENDPOINT_HALT (0u)
#define FEATURE_DEVICE_REMOTE_WAKEUP (1u)
#define FEATURE_TEST_MODE (2u)
#define STRING_INDEX_LANGUAGES (0x00u)
#define STRING_INDEX_MANUFACTURER (0x01u)
#define STRING_INDEX_PRODUCT (0x02u)
#define SAM_BA_MIN(a, b) (((a) < (b)) ? (a) : (b))
typedef struct _USB_CDC
{
// Private members
Usb *pUsb;
uint8_t currentConfiguration;
uint8_t currentConnection;
// Public Methods:
uint8_t (*IsConfigured)(struct _USB_CDC *pCdc);
// uint32_t (*Write) (Usb *pUsb, const char *pData, uint32_t length, uint8_t ep_num);
// uint32_t (*Read) (Usb *pUsb, char *pData, uint32_t length);
} USB_CDC, *P_USB_CDC;
/**
* \brief Initializes the USB module
*
* \return Pointer to the USB CDC structure
*/
P_USB_CDC usb_init(void);
void sam_ba_usb_CDC_Enumerate(P_USB_CDC pCdc);
uint32_t USB_SendString(Usb *pUsb, const char* ascii_string, uint8_t maxLength);
extern USB_CDC sam_ba_cdc;
#endif // CDC_ENUMERATE_H

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Store xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="AtmelPackComponentManagement">
<ProjectComponents />
</Store>

View file

@ -0,0 +1,300 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>7.0</ProjectVersion>
<ToolchainName>com.Atmel.ARMGCC.C</ToolchainName>
<ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>
<avrdevice>ATSAMD51J19A</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>C</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>samd21_sam_ba</AssemblyName>
<Name>samd51_sam_ba</Name>
<RootNamespace>samd21_sam_ba</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress>0x20000000</RamSnippetAddress>
<UncachedRange />
<preserveEEPROM>true</preserveEEPROM>
<OverrideVtorValue>exception_table</OverrideVtorValue>
<BootSegment>2</BootSegment>
<eraseonlaunchrule>0</eraseonlaunchrule>
<ExternalProgrammingToolCommand />
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.27.3" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
<avrtool>com.atmel.avrdbg.tool.edbg</avrtool>
<avrtoolserialnumber>00000000EZE000006352</avrtoolserialnumber>
<avrdeviceexpectedsignature>0x60060005</avrdeviceexpectedsignature>
<avrtoolinterface>SWD</avrtoolinterface>
<com_atmel_avrdbg_tool_atmelice>
<ToolOptions>
<InterfaceProperties>
<SwdClock>0</SwdClock>
</InterfaceProperties>
<InterfaceName>SWD</InterfaceName>
</ToolOptions>
<ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>
<ToolNumber>J41800001895</ToolNumber>
<ToolName>Atmel-ICE</ToolName>
</com_atmel_avrdbg_tool_atmelice>
<avrtoolinterfaceclock>2000000</avrtoolinterfaceclock>
<com_atmel_avrdbg_tool_edbg>
<ToolOptions>
<InterfaceProperties>
<SwdClock>2000000</SwdClock>
</InterfaceProperties>
<InterfaceName>SWD</InterfaceName>
</ToolOptions>
<ToolType>com.atmel.avrdbg.tool.edbg</ToolType>
<ToolNumber>00000000EZE000006352</ToolNumber>
<ToolName>EDBG</ToolName>
</com_atmel_avrdbg_tool_edbg>
<UseGdb>True</UseGdb>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize for size (-Os)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
</ArmGcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
</ArmGcc>
</ToolchainSettings>
<UsesExternalMakeFile>True</UsesExternalMakeFile>
<OutputDirectory />
<BuildTarget>DEBUG=1 all</BuildTarget>
<CleanTarget>clean</CleanTarget>
<ExternalMakeFilePath>Makefile</ExternalMakeFilePath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'featherm4' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
</ArmGcc>
</ToolchainSettings>
<UsesExternalMakeFile>True</UsesExternalMakeFile>
<OutputDirectory />
<BuildTarget>DEBUG=1 all BOARD_ID=FEATHER_M4 BOARD_CHIP=__SAMD51G19A__</BuildTarget>
<CleanTarget>clean BOARD_ID=FEATHER_M4</CleanTarget>
<ExternalMakeFilePath>Makefile</ExternalMakeFilePath>
<OutputPath>bin\featherm4\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'metrom4' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsamd21j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
</ArmGcc>
</ToolchainSettings>
<UsesExternalMakeFile>True</UsesExternalMakeFile>
<OutputDirectory />
<BuildTarget>DEBUG=0 all BOARD_ID=METRO_M4 BOARD_CHIP=__SAMD51J19A__</BuildTarget>
<CleanTarget>clean BOARD_ID=METRO_M4</CleanTarget>
<ExternalMakeFilePath>Makefile</ExternalMakeFilePath>
<OutputPath>bin\metrom4\</OutputPath>
<OutputFileName>METRO_M4_sam_ba</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
</PropertyGroup>
<ItemGroup>
<Compile Include="board_definitions.h">
<SubType>compile</SubType>
<Link>board_definitions.h</Link>
</Compile>
<Compile Include="board_definitions_feather_m4.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="board_definitions_metro_m4.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="board_driver_led.c">
<SubType>compile</SubType>
<Link>board_driver_led.c</Link>
</Compile>
<Compile Include="board_driver_led.h">
<SubType>compile</SubType>
<Link>board_driver_led.h</Link>
</Compile>
<Compile Include="board_driver_serial.c">
<SubType>compile</SubType>
<Link>board_driver_serial.c</Link>
</Compile>
<Compile Include="board_driver_serial.h">
<SubType>compile</SubType>
<Link>board_driver_serial.h</Link>
</Compile>
<Compile Include="board_driver_usb.c">
<SubType>compile</SubType>
<Link>board_driver_usb.c</Link>
</Compile>
<Compile Include="board_driver_usb.h">
<SubType>compile</SubType>
<Link>board_driver_usb.h</Link>
</Compile>
<Compile Include="board_init.c">
<SubType>compile</SubType>
<Link>board_init.c</Link>
</Compile>
<Compile Include="board_startup.c">
<SubType>compile</SubType>
<Link>board_startup.c</Link>
</Compile>
<Compile Include="main.c">
<SubType>compile</SubType>
<Link>main.c</Link>
</Compile>
<Compile Include="sam_ba_cdc.c">
<SubType>compile</SubType>
<Link>sam_ba_cdc.c</Link>
</Compile>
<Compile Include="sam_ba_cdc.h">
<SubType>compile</SubType>
<Link>sam_ba_cdc.h</Link>
</Compile>
<Compile Include="sam_ba_monitor.c">
<SubType>compile</SubType>
<Link>sam_ba_monitor.c</Link>
</Compile>
<Compile Include="sam_ba_monitor.h">
<SubType>compile</SubType>
<Link>sam_ba_monitor.h</Link>
</Compile>
<Compile Include="sam_ba_serial.c">
<SubType>compile</SubType>
<Link>sam_ba_serial.c</Link>
</Compile>
<Compile Include="sam_ba_serial.h">
<SubType>compile</SubType>
<Link>sam_ba_serial.h</Link>
</Compile>
<Compile Include="sam_ba_usb.c">
<SubType>compile</SubType>
<Link>sam_ba_usb.c</Link>
</Compile>
<Compile Include="sam_ba_usb.h">
<SubType>compile</SubType>
<Link>sam_ba_usb.h</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="bootloader_FEATHER_M4.ld">
<SubType>compile</SubType>
</None>
<None Include="bootloader_METRO_M4.ld">
<SubType>compile</SubType>
</None>
<None Include="Makefile">
<SubType>compile</SubType>
<Link>Makefile</Link>
</None>
<None Include="README.md">
<SubType>compile</SubType>
<Link>README.md</Link>
</None>
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

View file

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Atmel Studio Solution File, Format Version 11.00
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "samd51_sam_ba", "samd51_sam_ba.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Release|ARM = Release|ARM
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|ARM.ActiveCfg = metrom4|ARM
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|ARM.Build.0 = metrom4|ARM
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|ARM.ActiveCfg = Release|ARM
{DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|ARM.Build.0 = Release|ARM
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:10003000000000000000000011060000550700004D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A818000008B5084B002B03D0C2
:1000600000000000B818000008B5084B002B03D0B2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A8180000600000205800002000000000A8
:10009000B818000060000020580000200000000098
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D8FA207970BDE6
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F044F938BD0004004018
:100310001A810021802201F04AF938BD0004004012
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F003F901990F480835A9
:10038000FF18381C221C01F009F901990F480835A3
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AEF80123EB550023337000E01C1CE3
:1004300001F0B4F80123EB550023337000E01C1CDD
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -99,305 +99,306 @@
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A40300205C000020BB
:10066000AC1800002E4A38B51368141C01331ED094
:10067000D1B200291BD12B4B1878012318402A4BEB
:100680000AD11D6829498D4201D118600FE0196017
:10069000274901390029FCD11960236883F30888B0
:1006A000FF239A43234B9A601D4B5B681847FFF763
:1006B00029FF62B600F09AFD00F04CF81E4B802234
:1006C00052039A601D4B1E4A041C5A60194AC021ED
:1006D000106A09060002000A0143116200229A60B2
:1006E00007221A60A368201C9847164B002801D0E7
:1006F00001221A701A78002A05D0002000F088FA2A
:1007000000F000FBFCE71B78002BEBD100F0E2FDD2
:100710000028E7D0012000F07BFA00F0F3FAFCE7B4
:100720000020000038040040FC7F00203581730762
:1007300048E8010000ED00E00044004110E000E066
:10074000E70300007B00002008B5FFF7A9FC00F0DC
:10075000C3FA08BD10B5054B054C2360FFF770FDCB
:10076000201C2168FFF75EFD201C10BD00500041D9
:100770001802002070B5051CC0B0081C161C0C1C0B
:1007800000F017FF40006A460323023053701070D8
:1007900076080123E218013A11785A00002906D19F
:1007A000281C69460023FFF7CFFD40B070BDB3425F
:1007B000F6DA684681520133ECE70000F7B5BA4A31
:1007C00004681378B949271CFF37051C10203872BC
:1007D0000B705378B648B74E037093783380D17856
:1007E000338809020B4333801179B34B1980517957
:1007F00018880902084318809079B0490880D27996
:100800000888120202430A8040227A71A84F3A787F
:10081000A64F120238780F1C0243A9488446181CC0
:10082000624500D1C2E020DC802149008A4200D12B
:100830006EE109DC812A00D192E0822A00D195E0A4
:10084000802A00D064E18BE081235B009A4200D1D2
:10085000CFE000DA58E1C0239B009A4200D157E173
:10086000984B9A4200D14FE152E190231B019A42EA
:1008700069D015DCD023DB009A4222D088231B01EB
:100880009A4269D0A023DB009A4200D040E1201CAC
:10089000FFF7EAFD3188286889B2FFF7F9FD3BE1EF
:1008A000894B9A4200D12FE100DC31E1874B9A421B
:1008B00000D11DE1864B9A4200D029E133886B714B
:1008C00022E133881B0A012B08D10B8812222868E9
:1008D000934201D80A8892B27E4911E133881B0AFB
:1008E000022B08D10B8843222868934201D80A883A
:1008F00092B2794904E133881B0A032B00D007E147
:100900003388DBB2012B17D0002B07D0022B00D08D
:10091000FEE00A882868D2B2704911E0042201A8DA
:100920006F4900F035FE3B8804222868934201D8C5
:100930003A8892B201A9E3E00A8828686949D2B2EC
:10094000FFF718FFE8E03388201C2B71FFF78CFDC0
:10095000201CFFF7A3FDDFE0291C01C90122CFE025
:10096000614900230B8028680222CAE05E49002208
:100970000A801888502210405C4A10701E880F2090
:10098000304018801888032800D9C1E012781B88ED
:1009900008335B01E418A379002A01D09B0600E02C
:1009A000DB06DB0F0B8028680222A9E019887F2272
:1009B00091434E4AC9B2117018880F210140198025
:1009C0003188002900D0A3E01988002900D19FE0D8
:1009D0001988032900D99BE012781B8808335B0132
:1009E000E318002A02D020225A718DE0102159719B
:1009F0008AE002887F239A433C4BD2B21A70018866
:100A00000F220A4002803288002A00D080E002884B
:100A1000002A00D17CE00288032A00D978E01B7804
:100A2000002B1FD0038808335B01E3189B799A06DB
:100A30006AD50388202208335B01E3181A71038802
:100A400008335B01E318DB795F065DD5038840223C
:100A500008335B01E318DA710388022208335B0173
:100A6000E3181EE0038808335B01E3189B79D9067D
:100A70004AD50388102208335B01E3181A710388F2
:100A800008335B01E318DB799A063DD50388202201
:100A900008335B01E318DA710388012208335B0134
:100AA000E3181A7130E0C046980000207D00002055
:100AB00082000020840000208600002080000020AA
:100AC000020300000103000021200000A12100001A
:100AD00021220000FC15000004000020E8150000A1
:100AE000D8150000DC1500007E0000207C000020EE
:100AF0000B8808222868934201D80A8892B20749D5
:100B00000023FFF721FC07E0201CFFF7ADFC03E00A
:100B1000201C0121FFF79EFCF7BDC04648000020C5
:100B200007B5054B0122019001A91868131CFFF7B6
:100B30000BFC01200EBDC0461802002013B5054B6A
:100B40006C4607341868211C0122FFF745FC207809
:100B500016BDC0461802002010B5074C201CFFF738
:100B60001FFB031C0020834205D022684823FF336B
:100B7000D05C0123184010BD1802002010B5054AB2
:100B80000C1C031C191C10680123221CFFF7DCFB42
:100B9000201C10BD1802002070B5084C061C201C3B
:100BA0000D1CFFF7FDFA0023984205D02068311C88
:100BB0002A1CFFF711FC031C181C70BD1802002032
:100BC000F8B50C4C051C201C0E1CFFF7E9FA00239D
:100BD000271C341C98420AD0002C07D0291C221C48
:100BE0003868FFF7F9FB241A2D18F5E7331C181C99
:100BF000F8BDC0461802002008B5031C081C111CD3
:100C00009847024B64221A8008BDC0468C00002021
:100C1000012805D1054B064A1A60064B187004E0FE
:100C2000002802D1044A014B1A6070478802002054
:100C300030160000940000207C16000030B50A1C1D
:100C40001C4985B00978031C00292AD0042A01D147
:100C5000006804E0022A01D1008800E00078520018
:100C600004A98B180B3B9C1AA3420BD00F21014007
:100C7000092902D83025294300E0373119700009CD
:100C8000013BF1E701A930230B7078234B700A2058
:100C90008B1898700D20D870074B04321B68D868E9
:100CA00003E005490968C868191CFFF7A5FF05B0EE
:100CB00030BDC046880000208802002072B6EFF3E5
:100CC0000883044A1360036883F30888436818475D
:100CD0007047C0468C020020084B1A88002A03D0B7
:100CE0001A88013A92B21A80054B1A88002A03D05A
:100CF0001A88013A92B21A807047C0468C000020D0
:100D00008A000020F0B591B008A9CC4A0B1C31CA6A
:100D100031C351CA51C360CA60C3C94BC9489A683C
:100D20007A255203520F92005258C74902609C68BC
:100D3000A4B262430C60C54900240A60C44A14602E
:100D4000C44C2570C44CC54D2368281C1B69402128
:100D50009847002802D0C24B64221A80C14B00225F
:100D60001860C14B1D60C14BC04DBE4F1A602A6850
:100D70003B689A42E6D2BC4B1B681A78FF2A00D126
:100D800014E2232A00D0EBE1B94E3378002B06D0D1
:100D9000B14BB8491B680222D868FFF72DFFAD4B55
:100DA0001B78532B3CD13B682A6893421ED9AE482E
:100DB00001322A609A1AB04B01681B680131016048
:100DC000AE4E9A4201D2326000E03360A0483268F1
:100DD0000068049000F0DCFB336829685A182A6028
:100DE000A14A1668F1181160A54A13702B68013BDF
:100DF0002B609D4B1A68013A1A60A14B9E4A1B78E2
:100E000011688B420AD222689148C91A0068926917
:100E10009047002802D0924B64221A80C0468DE190
:100E2000522B0AD18A48944A2368006811685B698A
:100E3000039098476422934B0DE04F2B05D1844BD0
:100E40008D4A1B6812681A7078E1482B05D1804BD7
:100E5000894A1B6812681A8070E1572B05D17C4BB8
:100E6000854A1B6812681A6068E16F2B03D1784BC2
:100E70000121186807E0682B08D1754B7E481B6874
:100E800002211B880360FFF7D9FE57E1772B06D1BB
:100E90006F4B79481B6804211B680360F3E7472BFD
:100EA00013D1754B1868FFF709FF774B1B6883F365
:100EB000088862B6754B1B78002B00D13EE1664B6B
:100EC00006201B681B68984738E1542B04D1012386
:100ED0003370614B1B6864E04E2B0CD13378002BD0
:100EE00006D15D4B63491B680222D868FFF784FE78
:100EF0000023337022E1562B57D123686449D86808
:100F00000122FFF779FE23686249D8680322FFF7C0
:100F100073FE614D2368291CD8680122FFF76CFE1F
:100F200023685E49D8680D22FFF766FE2368291CF6
:100F3000D8680122FFF760FE4B4F4C4D5849002303
:100F400039602B603A1C281C13685E1C16601B78E5
:100F50000593002B03D0036801330360F4E73E4E92
:100F60002A683368D868FFF747FE33684A49D8686B
:100F70000122FFF741FE059929604A4939603A4A42
:100F80001368581C10601B78002B04D0374B1A686C
:100F900001321A60F3E733682A68D868FFF72CFE3D
:100FA0003368D86833490222C6E0334A582B17D138
:100FB000244E264D366813682A68B10093420AD23F
:100FC0001F4D5808E861384828801D4D287DC60708
:100FD000FBD55B18F2E7204B34491B68D868AAE0C0
:100FE000592B79D112681A4B3149002A02D11B685A
:100FF0000B606CE0124D086819686B68104E802514
:10100000AB4392087360002A61D02A4B0C4D2B80B1
:101010000B4E337DDD07FBD500230A4D2D6801956E
:10102000AD08AB4203D3244D054E358046E09342D4
:10103000F9D09D00465901334E51EEE710160000DD
:10104000004000414002002038020020340200200D
:101050008402002030020020880200204402002088
:101060008A000020280200202C0200203C020020E0
:1010700088000020701600009002002094020020DA
:10108000240200208C0000208C020020940000200C
:101090004C160000751600004E1600009816000051
:1010A000501600005C16000002A5FFFF6516000048
:1010B0009000002044A5FFFF04A5FFFF3F4E357DB3
:1010C000EE07FBD59D0049194019D21A9BE73C4B0E
:1010D0003C491B68D8682EE05A2B2FD13A4B176831
:1010E0001D680026EF19BD4206D02878311C00F09B
:1010F00013F90135061CF6E7314B34491B68012210
:10110000D868FFF779FD07230F223240111C3609FA
:101110003031092A00DD07311820C0186A46815491
:10112000013BF1D2236806A9D8680822FFF764FDC5
:1011300023682749D8680322FFF75EFD254B7A22F2
:101140001A70254B00221A60244B1B7893422DD035
:101150001B4B23491B680122D868FFF74DFD25E092
:10116000111C3039C8B21C4B092804D81D682A014B
:10117000114319601AE0111C4139052903D81E6872
:10118000373A310106E0111C6139052904D8186885
:10119000573A01010A4308E02C2A03D10A4A196888
:1011A000116001E00B490A7000221A600D4B1A68A9
:1011B00001321A600C4B1A680132D5E5004000413B
:1011C0008802002069160000840200206D160000CD
:1011D0006F160000300200209002002088000020DE
:1011E000731600003C0200202C02002010B51C4B9E
:1011F00001201A78032402431A701A4B0F2219781F
:101200009143197019782143197017490C782043BC
:10121000087019780A401A701A7830210A431A7037
:10122000124B80211A6A0A431A62114B114A5A80E2
:101230005A7852B2002AFBDBC4220F480F499203AE
:10124000FEF762FF0E4A002313700E4A13700E4A17
:1012500013700E4A13700E4A13700E4A137010BDAD
:10126000D6440041BB440041D74400410004004043
:10127000000C004019400000001C00422AF600004B
:10128000980200201F030020990200209C020020E9
:10129000200300201D03002008B5C1B20248FEF75C
:1012A00061FF012008BDC046001C0042024B187EB1
:1012B0004007C00F7047C046001C004208B5FFF74A
:1012C000F5FF0028FBD00248FEF752FF08BDC046DC
:1012D000001C004208B5FFF7E9FF0023984205D043
:1012E000FFF7ECFF031C233B5A425341181C08BD77
:1012F00070B5041C0D1C4618B44204D02078FFF7CA
:10130000CBFF0134F8E7281C70BD10B5041CFFF7B3
:10131000D5FF2070012010BD0B0A5840034B400040
:10132000C05A0902484080B27047C046A616000065
:10133000F7B50024051C0F1C261CBC4220D0FFF76B
:10134000BDFF114BC0B21B780190002B1AD1311C8C
:10135000FFF7E2FF0D4B061C1A88002A04D10C4A45
:1013600011782A1C002907D001996A1C2970802F46
:1013700002D11988013919800134A4B2151CDCE7A7
:10138000301C00E00120FEBD1D0300209A02002059
:101390001E030020F0B53E4E85B0002203900C1CC9
:1013A00032703C4B914201D1012201E03A490C805C
:1013B0001A707F231C4201D080349C43FFF77EFFCC
:1013C0003378C0B2002B07D000253570FFF776FFC9
:1013D0003378C0B2AB4236D1432803D0712853D002
:1013E0001528EBD1012300930120FFF755FF00984A
:1013F000FFF752FF00998025C843C0B2FFF74CFFAA
:10140000039B00270293244A1388002B1DD12149F6
:1014100001930978002918D10198FFF73DFF391C85
:101420000198FFF779FF013D071C002DEBD1000A61
:10143000C0B2FFF731FFF8B2FFF72EFFFFF73EFF14
:101440003378002B0AD035701FE00299013B0978F0
:101450001380029B019101330293DDE7C0B206289D
:1014600007D1009B03990133DBB280310093803CAC
:101470000391002CB8D10420FFF70EFFFFF71EFFE9
:10148000044B01251C7000E00025281C05B0F0BDB0
:101490001D0300201E0300209A020020F0B5384CE6
:1014A00087B0002301902370994201D1012301E00C
:1014B000344A1180344A642613704320FFF7ECFE4F
:1014C000324FFFF7F3FE002803D1002F03D0013F76
:1014D000F7E7002F03D1013E002EEED14DE00125AC
:1014E000FFF7ECFE2378002B38D1C0B20290012820
:1014F00005D004283DD10620FFF7CEFE39E005AE29
:101500000221301CFFF714FF01988021FFF710FF24
:1015100023780390002B18D1FFF7D0FE0702FFF7C6
:10152000CDFEBFB223783F18BFB2012B0DD0039B75
:101530009F4207D13378AB4204D1EB437278DBB2E0
:101540009A4204D01820FFF7A7FE002303E00620EC
:10155000FFF7A2FE029B2278002A02D00026267006
:101560000BE0012B05D1019A6B1C8032DDB2019298
:10157000B6E7054A002313700126301C07B0F0BD02
:101580001D0300209A0200201E03002000350C00DD
:1015900010B50023934203D0CC5CC4540133F9E767
:1015A00010BD031C8218934202D019700133FAE770
:1015B00070470023C25C0133002AFBD1581E7047DC
:1015C000F8B5C046F8BC08BC9E467047F8B5C046A2
:1015D000F8BC08BC9E467047040309044172647558
:1015E000696E6F204C4C430041726475696E6F20C8
:1015F0004D4B52466F7831323030000012010002FC
:1016000002000040412350000002010200010000DE
:101610000800000010000000200000004000000052
:101620008000000000010000000200000004000033
:1016300099120000BD120000AD120000F11200006E
:101640000B130000951300009D140000760020008D
:101650004D617220313020323031370031323A3230
:10166000303A313700580A0D00590A0D005A00234C
:101670000A0D003E00322E3000000000210B000059
:101680003D0B0000590B00007D0B0000990B000082
:101690007D0B0000C10B00005B41726475696E6FC9
:1016A0003A58595A5D0000002110422063308440AE
:1016B000A550C660E770088129914AA16BB18CC121
:1016C000ADD1CEE1EFF13112100273325222B55298
:1016D0009442F772D662399318837BB35AA3BDD371
:1016E0009CC3FFF3DEE36224433420040114E66468
:1016F000C774A44485546AA54BB528850995EEE5C1
:10170000CFF5ACC58DD55336722611163006D77677
:10171000F6669556B4465BB77AA719973887DFF710
:10172000FEE79DD7BCC7C448E5588668A77840083F
:10173000611802282338CCC9EDD98EE9AFF9488960
:1017400069990AA92BB9F55AD44AB77A966A711AD7
:10175000500A333A122AFDDBDCCBBFFB9EEB799BB0
:10176000588B3BBB1AABA66C877CE44CC55C222C27
:10177000033C600C411CAEED8FFDECCDCDDD2AAD00
:101780000BBD688D499D977EB66ED55EF44E133EB7
:10179000322E511E700E9FFFBEEFDDDFFCCF1BBF50
:1017A0003AAF599F788F8891A981CAB1EBA10CD12A
:1017B0002DC14EF16FE18010A100C230E320045032
:1017C000254046706760B9839893FBA3DAB33DC3A5
:1017D0001CD37FE35EF3B1029012F322D232354282
:1017E000145277625672EAB5CBA5A89589856EF535
:1017F0004FE52CD50DC5E234C324A01481046674D2
:10180000476424540544DBA7FAB79987B8975FE784
:101810007EF71DC73CD7D326F2369106B016576621
:101820007676154634564CD96DC90EF92FE9C8990C
:10183000E9898AB9ABA94458654806782768C01871
:10184000E1088238A3287DCB5CDB3FEB1EFBF98BE4
:10185000D89BBBAB9ABB754A545A376A167AF10AC1
:10186000D01AB32A923A2EFD0FED6CDD4DCDAABDF4
:101870008BADE89DC98D267C076C645C454CA23C11
:10188000832CE01CC10C1FEF3EFF5DCF7CDF9BAFC4
:10189000BABFD98FF89F176E367E554E745E932E61
:0C18A000B23ED10EF01E0000000000005F
:1018AC000114000009024300020100803209040007
:1018BC0000010202000005240010010424020005AE
:1018CC00240600010524010001070583030800FF1D
:1018DC0009040100020A0000000705810240000013
:1018EC00070502024000000000C2010000000800D1
:0C18FC0069000000410000000000000036
:10065000000000205C000020A80300205C000020B7
:10066000BC18000038B5304B1A681C1C013221D070
:100670002E4A191D1160D9B200291BD12C4A1078BD
:10068000012210402B4A0AD115682B498D4201D115
:1006900010600FE01160294901390029FCD1116077
:1006A000226882F30888FF229343254A93601E4BF9
:1006B0005B681847FFF726FF62B600F09DFD00F06B
:1006C0004FF8204B802252039A601F4B1F4A041C94
:1006D0005A601B4AC021106A09060002000A014341
:1006E000116200229A6007221A60A368201C9847B2
:1006F000174B002801D001221A701A78002A05D061
:10070000002000F08BFA00F003FBFCE71B78002BC5
:10071000EBD100F0E5FD0028E7D0012000F07EFAE3
:1007200000F0F6FAFCE7C0460020000018020020A6
:1007300038040040FC7F00203581730748E8010041
:1007400000ED00E00044004110E000E0E70300009D
:100750007B00002008B5FFF7A3FC00F0C3FA08BD3A
:1007600010B5054B054C2360FFF76AFD201C21687E
:10077000FFF758FD201C10BD005000411C02002056
:1007800070B5051CC0B0081C161C0C1C00F017FF2F
:1007900040006A460323023053701070760801232C
:1007A000E218013A11785A00002906D1281C69463E
:1007B0000023FFF7C9FD40B070BDB342F6DA6846CA
:1007C00081520133ECE70000F7B5BA4A04681378A8
:1007D000B949271CFF37051C102038720B7053785D
:1007E000B648B74E037093783380D17833880902C6
:1007F0000B4333801179B34B198051791888090262
:10080000084318809079B0490880D279088812028C
:1008100002430A8040227A71A84F3A78A64F12020A
:1008200038780F1C0243A9488446181C624500D141
:10083000C2E020DC802149008A4200D16EE109DC5F
:10084000812A00D192E0822A00D195E0802A00D04E
:1008500064E18BE081235B009A4200D1CFE000DAB3
:1008600058E1C0239B009A4200D157E1984B9A422D
:1008700000D14FE152E190231B019A4269D015DC6F
:10088000D023DB009A4222D088231B019A4269D0F0
:10089000A023DB009A4200D040E1201CFFF7E4FDDA
:1008A0003188286889B2FFF7F3FD3BE1894B9A4212
:1008B00000D12FE100DC31E1874B9A4200D11DE1EC
:1008C000864B9A4200D029E133886B7122E133884C
:1008D0001B0A012B08D10B8812222868934201D8E9
:1008E0000A8892B27E4911E133881B0A022B08D193
:1008F0000B8843222868934201D80A8892B279492A
:1009000004E133881B0A032B00D007E13388DBB2F4
:10091000012B17D0002B07D0022B00D0FEE00A8855
:100920002868D2B2704911E0042201A86F4900F092
:1009300035FE3B8804222868934201D83A8892B257
:1009400001A9E3E00A8828686949D2B2FFF718FFD5
:10095000E8E03388201C2B71FFF786FD201CFFF791
:100960009DFDDFE0291C01C90122CFE06149002380
:100970000B8028680222CAE05E4900220A8018889B
:10098000502210405C4A10701E880F2030401880A2
:100990001888032800D9C1E012781B8808335B014E
:1009A000E418A379002A01D09B0600E0DB06DB0FE8
:1009B0000B8028680222A9E019887F2291434E4AC1
:1009C000C9B2117018880F2101401980318800299F
:1009D00000D0A3E01988002900D19FE019880329DD
:1009E00000D99BE012781B8808335B01E318002ACA
:1009F00002D020225A718DE0102159718AE00288BC
:100A00007F239A433C4BD2B21A7001880F220A40CE
:100A100002803288002A00D080E00288002A00D1BB
:100A20007CE00288032A00D978E01B78002B1FD0D5
:100A3000038808335B01E3189B799A066AD503881B
:100A4000202208335B01E3181A71038808335B0125
:100A5000E318DB795F065DD50388402208335B012C
:100A6000E318DA710388022208335B01E3181EE001
:100A7000038808335B01E3189B79D9064AD50388BC
:100A8000102208335B01E3181A71038808335B01F5
:100A9000E318DB799A063DD50388202208335B01F1
:100AA000E318DA710388012208335B01E3181A7135
:100AB00030E0C046980000207D0000208200002029
:100AC0008400002086000020800000200203000037
:100AD0000103000021200000A121000021220000CC
:100AE0000C16000004000020F4150000E4150000BE
:100AF000E81500007E0000207C0000200B88082202
:100B00002868934201D80A8892B207490023FFF768
:100B10001BFC07E0201CFFF7A7FC03E0201C0121C1
:100B2000FFF798FCF7BDC0464800002007B5054B0D
:100B30000122019001A91868131CFFF705FC012090
:100B40000EBDC0461C02002013B5054B6C46073491
:100B50001868211C0122FFF73FFC207816BDC04613
:100B60001C02002010B5074C201CFFF719FB031CCA
:100B70000020834205D022684823FF33D05C012344
:100B8000184010BD1C02002010B5054A0C1C031CA7
:100B9000191C10680123221CFFF7D6FB201C10BD76
:100BA0001C02002070B5084C061C201C0D1CFFF711
:100BB000F7FA0023984205D02068311C2A1CFFF761
:100BC0000BFC031C181C70BD1C020020F8B50C4C5B
:100BD000051C201C0E1CFFF7E3FA0023271C341C05
:100BE00098420AD0002C07D0291C221C3868FFF735
:100BF000F3FB241A2D18F5E7331C181CF8BDC0466A
:100C00001C02002008B5031C081C111C9847024B4D
:100C100064221A8008BDC0468C000020012805D13E
:100C2000054B064A1A60064B187004E0002802D1F2
:100C3000044A014B1A6070478C02002040160000E5
:100C4000940000208C16000030B50A1C1C4985B0A9
:100C50000978031C00292AD0042A01D1006804E085
:100C6000022A01D1008800E00078520004A98B1804
:100C70000B3B9C1AA3420BD00F210140092902D83B
:100C80003025294300E0373119700009013BF1E7B5
:100C900001A930230B7078234B700A208B189870B1
:100CA0000D20D870074B04321B68D86803E0054953
:100CB0000968C868191CFFF7A5FF05B030BDC0461C
:100CC000880000208C02002072B6EFF30883044AEB
:100CD0001360036883F30888436818477047C04669
:100CE00090020020084B1A88002A03D01A88013A83
:100CF00092B21A80054B1A88002A03D01A88013A4A
:100D000092B21A807047C0468C0000208A000020F2
:100D1000F0B591B008A9CC4A0B1C31CA31C351CAF5
:100D200051C360CA60C3C94BC9489A687A25520347
:100D3000520F92005258C74902609C68A4B26243A5
:100D40000C60C54900240A60C44A1460C44C257074
:100D5000C44CC54D2368281C1B69402198470028B6
:100D600002D0C24B64221A80C14B00221860C14BD2
:100D70001D60C14BC04DBE4F1A602A683B689A4245
:100D8000E6D2BC4B1B681A78FF2A00D114E2232A52
:100D900000D0EBE1B94E3378002B06D0B14BB84907
:100DA0001B680222D868FFF72DFFAD4B1B78532B31
:100DB0003CD13B682A6893421ED9AE4801322A6072
:100DC0009A1AB04B01681B6801310160AE4E9A421D
:100DD00001D2326000E03360A048326800680490BD
:100DE00000F0DCFB336829685A182A60A14A1668AB
:100DF000F1181160A54A13702B68013B2B609D4BC5
:100E00001A68013A1A60A14B9E4A1B7811688B42FE
:100E10000AD222689148C91A00689269904700284E
:100E200002D0924B64221A80C0468DE1522B0AD127
:100E30008A48944A2368006811685B690390984760
:100E40006422934B0DE04F2B05D1844B8D4A1B68D8
:100E500012681A7078E1482B05D1804B894A1B68CB
:100E600012681A8070E1572B05D17C4B854A1B68AC
:100E700012681A6068E16F2B03D1784B0121186862
:100E800007E0682B08D1754B7E481B6802211B8840
:100E90000360FFF7D9FE57E1772B06D16F4B7948F6
:100EA0001B6804211B680360F3E7472B13D1754BC4
:100EB0001868FFF709FF774B1B6883F3088862B651
:100EC000754B1B78002B00D13EE1664B06201B685A
:100ED0001B68984738E1542B04D101233370614BD0
:100EE0001B6864E04E2B0CD13378002B06D15D4B90
:100EF00063491B680222D868FFF784FE0023337021
:100F000022E1562B57D123686449D8680122FFF7A4
:100F100079FE23686249D8680322FFF773FE614DAA
:100F20002368291CD8680122FFF76CFE23685E49FC
:100F3000D8680D22FFF766FE2368291CD8680122B5
:100F4000FFF760FE4B4F4C4D5849002339602B6032
:100F50003A1C281C13685E1C16601B780593002B36
:100F600003D0036801330360F4E73E4E2A68336818
:100F7000D868FFF747FE33684A49D8680122FFF76F
:100F800041FE059929604A4939603A4A1368581C5C
:100F900010601B78002B04D0374B1A6801321A609E
:100FA000F3E733682A68D868FFF72CFE3368D868FF
:100FB00033490222C6E0334A582B17D1244E264D1E
:100FC000366813682A68B10093420AD21F4D580848
:100FD000E861384828801D4D287DC607FBD55B1881
:100FE000F2E7204B34491B68D868AAE0592B79D125
:100FF00012681A4B3149002A02D11B680B606CE061
:10100000124D086819686B68104E8025AB43920832
:101010007360002A61D02A4B0C4D2B800B4E337D20
:10102000DD07FBD500230A4D2D680195AD08AB42C5
:1010300003D3244D054E358046E09342F9D09D0000
:10104000465901334E51EEE72016000000400041A2
:10105000440200203C0200203802002088020020C8
:10106000340200208C020020480200208A00002068
:101070002C020020300200204002002088000020C6
:101080008016000094020020980200202802002010
:101090008C00002090020020940000205C160000CC
:1010A000851600005E160000A816000060160000FD
:1010B0006C16000002A5FFFF7516000090000020CE
:1010C00044A5FFFF04A5FFFF3F4E357DEE07FBD58E
:1010D0009D0049194019D21A9BE73C4B3C491B68BB
:1010E000D8682EE05A2B2FD13A4B17681D6800267E
:1010F000EF19BD4206D02878311C00F013F90135F4
:10110000061CF6E7314B34491B680122D868FFF70B
:1011100079FD07230F223240111C36093031092A8C
:1011200000DD07311820C0186A468154013BF1D216
:10113000236806A9D8680822FFF764FD23682749B9
:10114000D8680322FFF75EFD254B7A221A70254BE3
:1011500000221A60244B1B7893422DD01B4B23494D
:101160001B680122D868FFF74DFD25E0111C3039BE
:10117000C8B21C4B092804D81D682A011143196004
:101180001AE0111C4139052903D81E68373A31018C
:1011900006E0111C6139052904D81868573A010185
:1011A0000A4308E02C2A03D10A4A1968116001E0B9
:1011B0000B490A7000221A600D4B1A6801321A603E
:1011C0000C4B1A680132D5E5004000418C0200202A
:1011D00079160000880200207D1600007F160000AE
:1011E00034020020940200208800002083160000B2
:1011F000400200203002002010B51C4B01201A785C
:10120000032402431A701A4B0F2219789143197064
:1012100019782143197017490C7820430870197800
:101220000A401A701A7830210A431A70124B802132
:101230001A6A0A431A62114B114A5A805A7852B2FA
:10124000002AFBDBC4220F480F499203FEF75CFF24
:101250000E4A002313700E4A13700E4A13700E4A82
:1012600013700E4A13700E4A137010BDD64400411D
:10127000BB440041D744004100040040000C004042
:1012800019400000001C00422AF600009C020020C9
:10129000230300209D020020A00200202403002040
:1012A0002103002008B5C1B20248FEF75BFF012010
:1012B00008BDC046001C0042024B187E4007C00F0C
:1012C0007047C046001C004208B5FFF7F5FF002834
:1012D000FBD00248FEF74CFF08BDC046001C004290
:1012E00008B5FFF7E9FF0023984205D0FFF7ECFFB0
:1012F000031C233B5A425341181C08BD70B5041C03
:101300000D1C4618B44204D02078FFF7CBFF0134FF
:10131000F8E7281C70BD10B5041CFFF7D5FF20703E
:10132000012010BD0B0A5840034B4000C05A09026F
:10133000484080B27047C046B6160000F7B500249A
:10134000051C0F1C261CBC4220D0FFF7BDFF114B13
:10135000C0B21B780190002B1AD1311CFFF7E2FFBD
:101360000D4B061C1A88002A04D10C4A11782A1C3D
:10137000002907D001996A1C2970802F02D1198891
:10138000013919800134A4B2151CDCE7301C00E0DF
:101390000120FEBD210300209E0200202203002028
:1013A000F0B53E4E85B0002203900C1C32703C4BD1
:1013B000914201D1012201E03A490C801A707F2349
:1013C0001C4201D080349C43FFF77EFF3378C0B2CB
:1013D000002B07D000253570FFF776FF3378C0B2B9
:1013E000AB4236D1432803D0712853D01528EBD116
:1013F000012300930120FFF755FF0098FFF752FFEC
:1014000000998025C843C0B2FFF74CFF039B00271B
:101410000293244A1388002B1DD121490193097896
:10142000002918D10198FFF73DFF391C0198FFF7FB
:1014300079FF013D071C002DEBD1000AC0B2FFF778
:1014400031FFF8B2FFF72EFFFFF73EFF3378002B96
:101450000AD035701FE00299013B09781380029B86
:10146000019101330293DDE7C0B2062807D1009B4A
:1014700003990133DBB280310093803C0391002C4F
:10148000B8D10420FFF70EFFFFF71EFF044B012524
:101490001C7000E00025281C05B0F0BD21030020D1
:1014A000220300209E020020F0B5384C87B00023B4
:1014B00001902370994201D1012301E0344A118047
:1014C000344A642613704320FFF7ECFE324FFFF7D7
:1014D000F3FE002803D1002F03D0013FF7E7002FD0
:1014E00003D1013E002EEED14DE00125FFF7ECFEC9
:1014F0002378002B38D1C0B20290012805D00428EF
:101500003DD10620FFF7CEFE39E005AE0221301CAA
:10151000FFF714FF01988021FFF710FF2378039055
:10152000002B18D1FFF7D0FE0702FFF7CDFEBFB2A8
:1015300023783F18BFB2012B0DD0039B9F4207D1E8
:101540003378AB4204D1EB437278DBB29A4204D0D9
:101550001820FFF7A7FE002303E00620FFF7A2FEF6
:10156000029B2278002A02D0002626700BE0012B75
:1015700005D1019A6B1C8032DDB20192B6E7054AB3
:10158000002313700126301C07B0F0BD210300209A
:101590009E0200202203002000350C0010B500231D
:1015A000934203D0CC5CC4540133F9E710BD031C53
:1015B0008218934202D019700133FAE77047002372
:1015C000C25C0133002AFBD1581E7047F8B5C046F3
:1015D000F8BC08BC9E467047F8B5C046F8BC08BCCD
:1015E0009E4670470403090441726475696E6F205A
:1015F0004C4C430041726475696E6F204D4B522014
:10160000464F5820313230300000000012010002F5
:1016100002000040412350000002010200010000CE
:101620000800000010000000200000004000000042
:101630008000000000010000000200000004000023
:10164000A5120000C9120000B9120000FD1200002E
:1016500017130000A1130000A91400007600200059
:101660004E6F7620333020323031370031303A310E
:10167000333A313900580A0D00590A0D005A002337
:101680000A0D003E00322E30000000002D0B00003D
:10169000490B0000650B0000890B0000A50B000042
:1016A000890B0000CD0B00005B41726475696E6FA1
:1016B0003A58595A5D00000021104220633084409E
:1016C000A550C660E770088129914AA16BB18CC111
:1016D000ADD1CEE1EFF13112100273325222B55288
:1016E0009442F772D662399318837BB35AA3BDD361
:1016F0009CC3FFF3DEE36224433420040114E66458
:10170000C774A44485546AA54BB528850995EEE5B0
:10171000CFF5ACC58DD55336722611163006D77667
:10172000F6669556B4465BB77AA719973887DFF700
:10173000FEE79DD7BCC7C448E5588668A77840082F
:10174000611802282338CCC9EDD98EE9AFF9488950
:1017500069990AA92BB9F55AD44AB77A966A711AC7
:10176000500A333A122AFDDBDCCBBFFB9EEB799BA0
:10177000588B3BBB1AABA66C877CE44CC55C222C17
:10178000033C600C411CAEED8FFDECCDCDDD2AADF0
:101790000BBD688D499D977EB66ED55EF44E133EA7
:1017A000322E511E700E9FFFBEEFDDDFFCCF1BBF40
:1017B0003AAF599F788F8891A981CAB1EBA10CD11A
:1017C0002DC14EF16FE18010A100C230E320045022
:1017D000254046706760B9839893FBA3DAB33DC395
:1017E0001CD37FE35EF3B1029012F322D232354272
:1017F000145277625672EAB5CBA5A89589856EF525
:101800004FE52CD50DC5E234C324A01481046674C1
:10181000476424540544DBA7FAB79987B8975FE774
:101820007EF71DC73CD7D326F2369106B016576611
:101830007676154634564CD96DC90EF92FE9C899FC
:10184000E9898AB9ABA94458654806782768C01861
:10185000E1088238A3287DCB5CDB3FEB1EFBF98BD4
:10186000D89BBBAB9ABB754A545A376A167AF10AB1
:10187000D01AB32A923A2EFD0FED6CDD4DCDAABDE4
:101880008BADE89DC98D267C076C645C454CA23C01
:10189000832CE01CC10C1FEF3EFF5DCF7CDF9BAFB4
:1018A000BABFD98FF89F176E367E554E745E932E51
:0C18B000B23ED10EF01E0000000000004F
:1018BC0001140000090243000201008032090400F7
:1018CC00000102020000052400100104240200059E
:1018DC00240600010524010001070583030800FF0D
:1018EC0009040100020A0000000705810240000003
:1018FC00070502024000000000C2010000000800C1
:0C190C0069000000410000000000000025
:0400000300000615DE
:00000001FF

Binary file not shown.

View file

@ -0,0 +1,502 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
:100140000F4B0F22197891431970197821431970B8
:100150000C490C782043087019780A401A701A78F4
:1001600020210A431A7038BD14400000000C0040E2
:100170000004004000080042006CDC0248440041DA
:100180003444004149440041F7B500230F1C01925B
:100190001D1C994254D001212A4E4000084333705F
:1001A000C1B2294B0322588B1C1C000910400128A6
:1001B00004D05B8B1B091A40022AF2D1606AC00A84
:1001C000C00208436062217E1F4B0122880708D4C9
:1001D000197E1142F7D05968C02292020A435A6030
:1001E00003E05B8B9B08134201D0002528E03270AE
:1001F000237E9907FCD5154A154B117801251970F6
:100200006268BD4212D0134B022013406360FFF7B7
:1002100047FF33785A1C3270227E9007FCD50B4979
:100220000B480A780135C254EDB2E9E78023DB02BE
:10023000134363600199002902D00320FFF730FFC8
:10024000281CFEBD7800002000080042280800425B
:1002500099000020FFFFFBFF024B00221870024BA9
:100260001A7070477A00002079000020F8B5274BFB
:100270001C786400E4B2264B03215D8B1A1C2D0907
:100280000D40012D04D05B8B1B0919400229F2D1CE
:10029000536ADB0ADB0223435362117E01231942B6
:1002A000FBD01B49498B8908194204D00320FFF772
:1002B000F7FE022427E017490D782B1C002B11D0E4
:1002C000154EEC1A365D154C2670114E177E012422
:1002D000768B274202D12642F7D00BE0B6082642A1
:1002E0000ED007E00B701C1C00280CD00320FFF779
:1002F000D7FE08E003200B700324FFF7D1FE02E0D5
:10030000013BDBB2DAE7201CF8BDC0467A000020D2
:1003100000080042790000207B00002028080042ED
:10032000034A1378591C1170024AD05401207047B7
:10033000790000207B000020154A164B1178002917
:1003400009D11549187809784118C9B21970802067
:1003500012494003C86111780131C9B2117019788E
:10036000F02902D81978092909D80B4908784042A0
:10037000C0B20870187809784118C9B2197012789B
:100380001B789A4203D18022044B5203DA617047F2
:100390007D000020010000200000002000440041FA
:1003A00010B5041C6B20FFF757FF201CFFF7B8FFA8
:1003B0000120FFF75BFF01210A1C6B20FFF7E4FE21
:1003C000014B187810BDC0469900002038B5051CB7
:1003D0006B200C1CFFF740FF281CFFF7A1FF201C1F
:1003E000FFF79EFF0120FFF741FF022038BD08B54F
:1003F0000520FFF7D5FFCE23011C19400520FFF78C
:10040000E5FF012008BD000010B5041C0020FFF727
:10041000C7FF78232D4A9843C1B2944242D018D8DE
:100420002B4B9C4238D009D82A4B9C4230D02A4BC7
:100430009C422FD0294B9C4245D13FE0284B9C4207
:100440002CD0284B9C422BD0274B9C423BD12023C5
:1004500033E0264A94422BD00AD8254B9C4223D025
:10046000244B9C4222D0244B9C422CD1402324E09C
:10047000224A94421ED004D8214B9C4223D16023AF
:100480001BE0204A944217D01F4A944215D01AE02C
:10049000082312E0102310E018230EE028230CE0BC
:1004A00030230AE0382308E0482306E0502304E024
:1004B000582302E0682300E0702319430020FFF76F
:1004C00085FF012000E0002010BDC046581100004B
:1004D00018100000780F0000C80F0000280F00005F
:1004E000B810000008110000681000009812000009
:1004F000F811000048120000A81100003813000095
:10050000E812000088130000D813000010B5041C86
:100510000020FFF745FF07239843E122C1B2920074
:10052000944220D008D8962C18D0FA235B009C4225
:1005300017D0642C22D11CE0114A944215D005D862
:100540009623DB009C4219D1042311E0FA22D20049
:1005500094420CD00B4A94420AD00FE0012421436C
:1005600007E0022304E0032302E0052300E0062362
:1005700019430020FFF72AFF012000E0002010BDF2
:10058000DC050000B80B000070B504AC267805ACA3
:100590002578441EA041C401002901D040210C430C
:1005A000002A01D020221443002B01D010231C4329
:1005B000002E01D008231C43002D01D004231C432E
:1005C0000220FFF7EDFE0125011C294021430220F6
:1005D000FFF7FCFE281C70BD10B5041C0420FFF7BB
:1005E000DFFE03231840084B9C4204D0074B9C427B
:1005F00008D1B02100E0982101430420FFF7E6FE76
:10060000012000E0002010BD10100000701000005C
:1006100008B50120FFF7C4FECF23011C19400120BB
:10062000FFF7D4FE012008BD07B5FFF7E0FEFFF796
:10063000EFFF0948FFF7E8FEFA20C000FFF766FF6A
:10064000002300930193181C191C1A1CFFF79CFF30
:100650000248FFF7C1FF07BD08110000101000009D
:1006600008B50348FFF72EFDFFF7DEFF08BDC046C3
:10067000A086010010B5C3699C07FCD4036802245E
:10068000A3430360C46901231C42FBD104682343D4
:1006900003600368DC07FCD4C46901231C42FBD15E
:1006A000C469DC401C42F7D1084B1A430260C3699D
:1006B0005A07FCD4C0239B0243608181C3699C0715
:1006C000FCD4036802221343036010BD0400004001
:1006D000037EDA07FCD5018570470000027E012306
:1006E0005107FBD5428B1A4207D1428BDA401A429E
:1006F00003D1428B92081A4202D0034B01221A7096
:10070000008DC0B27047C0467E00002070B50368FF
:10071000041C988B1A1C0821FF32084226D0802026
:1007200099839872112353704021144B9171507129
:100730005E68134DC0202E40800506435E605E69F2
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
:1007B0002021DA6901200A43DA61344B06241A78D1
:1007C00002431A70324B0F2219789143197019782D
:1007D000214319702F490C782043087019780A407A
:1007E0001A701A7860210A431A702B4B2B4A5A80D0
:1007F0005A7852B2002AFBDB294B01211A780A43AE
:100800001A709A78D107FCD426480268510B1F222F
:100810001140914200D1052111408C011D8D2249CA
:100820002940214319850468A10C0A401F2A00D1E0
:100830001D221C8D1F210A408C4322431A85026809
:100840000721D20D0A408A4200D103220A40188DA6
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
:100930009A07FAD5201CFEBD9C0100201C01002056
:10094000FF3F00F0F8B51A4E051C3378141C002B3D
:1009500012D1184B184A1A645A6C920B92035A64BB
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
:1009D00070470000084BFF305A69920B92035A612E
:1009E00002230372827980235B4213438371037A6B
:1009F0009A07FCD57047C0469C01002080235B42CB
:100A00001943C9B28172704770B5A02303225B00FD
:100A1000C254134B134A5C6CC021144089050C432B
:100A200046255C64FF35402444550F4D30261D6437
:100A300090256D0046555D6B1540294392255963FD
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020DC1E000064
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:101060002C1C000004000020141C0000041C0000C4
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A60704790020020601C000036
:1011C00098000020AC1C000030B50A1C1C4985B0FA
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE7401C000000400041F7
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:10160000A01C0000980200209C0200202C02002058
:101610009200002094020020980000207C1C000012
:10162000A51C00007E1C0000C81C0000801C0000DF
:101630008C1C000002A5FFFF951C000094000020F8
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000991C00008C0200209D1C00009F1C0000B2
:1017600038020020980200208E000020A31C0000F8
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D61C0000F7B50024EF
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C200047534D20313430300000000012010002D3
:101C300002000040412352000002010200010000A6
:101C4000080000001000000020000000400000001C
:101C500080000000000100000002000000040000FD
:101C60002518000049180000391800007D180000F0
:101C70009718000021190000291A000076002000A2
:101C80004E6F7620333020323031370031303A31E8
:101C9000333A323100580A0D00590A0D005A002318
:101CA0000A0D003E00322E3000000000AD10000092
:101CB000C9100000E5100000091100002511000006
:101CC000091100004D1100005B41726475696E6F6F
:101CD0003A58595A5D000000211042206330844078
:101CE000A550C660E770088129914AA16BB18CC1EB
:101CF000ADD1CEE1EFF13112100273325222B55262
:101D00009442F772D662399318837BB35AA3BDD33A
:101D10009CC3FFF3DEE36224433420040114E66431
:101D2000C774A44485546AA54BB528850995EEE58A
:101D3000CFF5ACC58DD55336722611163006D77641
:101D4000F6669556B4465BB77AA719973887DFF7DA
:101D5000FEE79DD7BCC7C448E5588668A778400809
:101D6000611802282338CCC9EDD98EE9AFF948892A
:101D700069990AA92BB9F55AD44AB77A966A711AA1
:101D8000500A333A122AFDDBDCCBBFFB9EEB799B7A
:101D9000588B3BBB1AABA66C877CE44CC55C222CF1
:101DA000033C600C411CAEED8FFDECCDCDDD2AADCA
:101DB0000BBD688D499D977EB66ED55EF44E133E81
:101DC000322E511E700E9FFFBEEFDDDFFCCF1BBF1A
:101DD0003AAF599F788F8891A981CAB1EBA10CD1F4
:101DE0002DC14EF16FE18010A100C230E3200450FC
:101DF000254046706760B9839893FBA3DAB33DC36F
:101E00001CD37FE35EF3B1029012F322D23235424B
:101E1000145277625672EAB5CBA5A89589856EF5FE
:101E20004FE52CD50DC5E234C324A014810466749B
:101E3000476424540544DBA7FAB79987B8975FE74E
:101E40007EF71DC73CD7D326F2369106B0165766EB
:101E50007676154634564CD96DC90EF92FE9C899D6
:101E6000E9898AB9ABA94458654806782768C0183B
:101E7000E1088238A3287DCB5CDB3FEB1EFBF98BAE
:101E8000D89BBBAB9ABB754A545A376A167AF10A8B
:101E9000D01AB32A923A2EFD0FED6CDD4DCDAABDBE
:101EA0008BADE89DC98D267C076C645C454CA23CDB
:101EB000832CE01CC10C1FEF3EFF5DCF7CDF9BAF8E
:101EC000BABFD98FF89F176E367E554E745E932E2B
:0C1ED000B23ED10EF01E00000000000029
:101EDC0001140000090243000201008032090400D1
:101EEC000001020200000524001001042402000578
:101EFC00240600010524010001070583030800FFE7
:101F0C0009040100020A00000007058102400000DC
:101F1C00070502024000000000C20100000008009A
:0C1F2C00690000004100000000000000FF
:0400000300000B816D
:00000001FF

Binary file not shown.

View file

@ -0,0 +1,502 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D41E000008B5084B002B03D090
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D41E000060000020580000200000000076
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
:100140000F4B0F22197891431970197821431970B8
:100150000C490C782043087019780A401A701A78F4
:1001600020210A431A7038BD14400000000C0040E2
:100170000004004000080042006CDC0248440041DA
:100180003444004149440041F7B500230F1C01925B
:100190001D1C994254D001212A4E4000084333705F
:1001A000C1B2294B0322588B1C1C000910400128A6
:1001B00004D05B8B1B091A40022AF2D1606AC00A84
:1001C000C00208436062217E1F4B0122880708D4C9
:1001D000197E1142F7D05968C02292020A435A6030
:1001E00003E05B8B9B08134201D0002528E03270AE
:1001F000237E9907FCD5154A154B117801251970F6
:100200006268BD4212D0134B022013406360FFF7B7
:1002100047FF33785A1C3270227E9007FCD50B4979
:100220000B480A780135C254EDB2E9E78023DB02BE
:10023000134363600199002902D00320FFF730FFC8
:10024000281CFEBD7800002000080042280800425B
:1002500099000020FFFFFBFF024B00221870024BA9
:100260001A7070477A00002079000020F8B5274BFB
:100270001C786400E4B2264B03215D8B1A1C2D0907
:100280000D40012D04D05B8B1B0919400229F2D1CE
:10029000536ADB0ADB0223435362117E01231942B6
:1002A000FBD01B49498B8908194204D00320FFF772
:1002B000F7FE022427E017490D782B1C002B11D0E4
:1002C000154EEC1A365D154C2670114E177E012422
:1002D000768B274202D12642F7D00BE0B6082642A1
:1002E0000ED007E00B701C1C00280CD00320FFF779
:1002F000D7FE08E003200B700324FFF7D1FE02E0D5
:10030000013BDBB2DAE7201CF8BDC0467A000020D2
:1003100000080042790000207B00002028080042ED
:10032000034A1378591C1170024AD05401207047B7
:10033000790000207B000020154A164B1178002917
:1003400009D11549187809784118C9B21970802067
:1003500012494003C86111780131C9B2117019788E
:10036000F02902D81978092909D80B4908784042A0
:10037000C0B20870187809784118C9B2197012789B
:100380001B789A4203D18022044B5203DA617047F2
:100390007D000020010000200000002000440041FA
:1003A00010B5041C6B20FFF757FF201CFFF7B8FFA8
:1003B0000120FFF75BFF01210A1C6B20FFF7E4FE21
:1003C000014B187810BDC0469900002038B5051CB7
:1003D0006B200C1CFFF740FF281CFFF7A1FF201C1F
:1003E000FFF79EFF0120FFF741FF022038BD08B54F
:1003F0000520FFF7D5FFCE23011C19400520FFF78C
:10040000E5FF012008BD000010B5041C0020FFF727
:10041000C7FF78232D4A9843C1B2944242D018D8DE
:100420002B4B9C4238D009D82A4B9C4230D02A4BC7
:100430009C422FD0294B9C4245D13FE0284B9C4207
:100440002CD0284B9C422BD0274B9C423BD12023C5
:1004500033E0264A94422BD00AD8254B9C4223D025
:10046000244B9C4222D0244B9C422CD1402324E09C
:10047000224A94421ED004D8214B9C4223D16023AF
:100480001BE0204A944217D01F4A944215D01AE02C
:10049000082312E0102310E018230EE028230CE0BC
:1004A00030230AE0382308E0482306E0502304E024
:1004B000582302E0682300E0702319430020FFF76F
:1004C00085FF012000E0002010BDC046581100004B
:1004D00018100000780F0000C80F0000280F00005F
:1004E000B810000008110000681000009812000009
:1004F000F811000048120000A81100003813000095
:10050000E812000088130000D813000010B5041C86
:100510000020FFF745FF07239843E122C1B2920074
:10052000944220D008D8962C18D0FA235B009C4225
:1005300017D0642C22D11CE0114A944215D005D862
:100540009623DB009C4219D1042311E0FA22D20049
:1005500094420CD00B4A94420AD00FE0012421436C
:1005600007E0022304E0032302E0052300E0062362
:1005700019430020FFF72AFF012000E0002010BDF2
:10058000DC050000B80B000070B504AC267805ACA3
:100590002578441EA041C401002901D040210C430C
:1005A000002A01D020221443002B01D010231C4329
:1005B000002E01D008231C43002D01D004231C432E
:1005C0000220FFF7EDFE0125011C294021430220F6
:1005D000FFF7FCFE281C70BD10B5041C0420FFF7BB
:1005E000DFFE03231840084B9C4204D0074B9C427B
:1005F00008D1B02100E0982101430420FFF7E6FE76
:10060000012000E0002010BD10100000701000005C
:1006100008B50120FFF7C4FECF23011C19400120BB
:10062000FFF7D4FE012008BD07B5FFF7E0FEFFF796
:10063000EFFF0948FFF7E8FEFA20C000FFF766FF6A
:10064000002300930193181C191C1A1CFFF79CFF30
:100650000248FFF7C1FF07BD08110000101000009D
:1006600008B50348FFF72EFDFFF7DEFF08BDC046C3
:10067000A086010010B5C3699C07FCD4036802245E
:10068000A3430360C46901231C42FBD104682343D4
:1006900003600368DC07FCD4C46901231C42FBD15E
:1006A000C469DC401C42F7D1084B1A430260C3699D
:1006B0005A07FCD4C0239B0243608181C3699C0715
:1006C000FCD4036802221343036010BD0400004001
:1006D000037EDA07FCD5018570470000027E012306
:1006E0005107FBD5428B1A4207D1428BDA401A429E
:1006F00003D1428B92081A4202D0034B01221A7096
:10070000008DC0B27047C0467E00002070B50368FF
:10071000041C988B1A1C0821FF32084226D0802026
:1007200099839872112353704021144B9171507129
:100730005E68134DC0202E40800506435E605E69F2
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
:1007B0002021DA6901200A43DA61344B06241A78D1
:1007C00002431A70324B0F2219789143197019782D
:1007D000214319702F490C782043087019780A407A
:1007E0001A701A7860210A431A702B4B2B4A5A80D0
:1007F0005A7852B2002AFBDB294B01211A780A43AE
:100800001A709A78D107FCD426480268510B1F222F
:100810001140914200D1052111408C011D8D2249CA
:100820002940214319850468A10C0A401F2A00D1E0
:100830001D221C8D1F210A408C4322431A85026809
:100840000721D20D0A408A4200D103220A40188DA6
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
:100930009A07FAD5201CFEBD9C0100201C01002056
:10094000FF3F00F0F8B51A4E051C3378141C002B3D
:1009500012D1184B184A1A645A6C920B92035A64BB
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
:1009D00070470000084BFF305A69920B92035A612E
:1009E00002230372827980235B4213438371037A6B
:1009F0009A07FCD57047C0469C01002080235B42CB
:100A00001943C9B28172704770B5A02303225B00FD
:100A1000C254134B134A5C6CC021144089050C432B
:100A200046255C64FF35402444550F4D30261D6437
:100A300090256D0046555D6B1540294392255963FD
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020D81E000068
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:10106000281C000004000020141C0000041C0000C8
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A607047900200205C1C00003A
:1011C00098000020A81C000030B50A1C1C4985B0FE
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE73C1C000000400041FB
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:101600009C1C0000980200209C0200202C0200205C
:10161000920000209402002098000020781C000016
:10162000A11C00007A1C0000C41C00007C1C0000EF
:10163000881C000002A5FFFF911C00009400002000
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000951C00008C020020991C00009B1C0000BE
:1017600038020020980200208E0000209F1C0000FC
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D21C0000F7B50024F3
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C20004E422031353030001201000202000040E7
:101C300041235500000201020001000008000000DD
:101C400010000000200000004000000080000000A4
:101C50000001000000020000000400002518000040
:101C600049180000391800007D180000971800007E
:101C700021190000291A0000760020004E6F7620FE
:101C8000323620323031380031343A32383A333754
:101C900000580A0D00590A0D005A00230A0D003E93
:101CA00000322E3000000000AD100000C91000000E
:101CB000E5100000091100002511000009110000C5
:101CC0004D1100005B41726475696E6F3A58595A44
:101CD0005D0000002110422063308440A550C660A2
:101CE000E770088129914AA16BB18CC1ADD1CEE1D9
:101CF000EFF13112100273325222B5529442F77250
:101D0000D662399318837BB35AA3BDD39CC3FFF328
:101D1000DEE36224433420040114E664C774A4445F
:101D200085546AA54BB528850995EEE5CFF5ACC578
:101D30008DD55336722611163006D776F66695562F
:101D4000B4465BB77AA719973887DFF7FEE79DD7C8
:101D5000BCC7C448E5588668A778400861180228BF
:101D60002338CCC9EDD98EE9AFF9488969990AA918
:101D70002BB9F55AD44AB77A966A711A500A333A8F
:101D8000122AFDDBDCCBBFFB9EEB799B588B3BBB68
:101D90001AABA66C877CE44CC55C222C033C600C1F
:101DA000411CAEED8FFDECCDCDDD2AAD0BBD688DB8
:101DB000499D977EB66ED55EF44E133E322E511E6F
:101DC000700E9FFFBEEFDDDFFCCF1BBF3AAF599F08
:101DD000788F8891A981CAB1EBA10CD12DC14EF1A8
:101DE0006FE18010A100C230E3200450254046700E
:101DF0006760B9839893FBA3DAB33DC31CD37FE339
:101E00005EF3B1029012F322D2323542145277625D
:101E10005672EAB5CBA5A89589856EF54FE52CD508
:101E20000DC5E234C324A0148104667447642454AD
:101E30000544DBA7FAB79987B8975FE77EF71DC718
:101E40003CD7D326F2369106B016576676761546FD
:101E500034564CD96DC90EF92FE9C899E9898AB968
:101E6000ABA94458654806782768C018E10882384D
:101E7000A3287DCB5CDB3FEB1EFBF98BD89BBBAB78
:101E80009ABB754A545A376A167AF10AD01AB32A9D
:101E9000923A2EFD0FED6CDD4DCDAABD8BADE89DC8
:101EA000C98D267C076C645C454CA23C832CE01CED
:101EB000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F58
:101EC000F89F176E367E554E745E932EB23ED10E3D
:081ED000F01E000000000000FC
:101ED80001140000090243000201008032090400D5
:101EE800000102020000052400100104240200057C
:101EF800240600010524010001070583030800FFEB
:101F080009040100020A00000007058102400000E0
:101F1800070502024000000000C20100000008009E
:0C1F280069000000410000000000000003
:0400000300000B816D
:00000001FF

Binary file not shown.

View file

@ -0,0 +1,404 @@
:10000000FC7F002015060000050600000906000020
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:10003000000000000000000011060000550700004D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000B818000008B5084B002B03D0B2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000B818000060000020580000200000000098
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B5203DA6170477800002001000020B1
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F04AF938BD0004004012
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F009F901990F480835A3
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0B4F80123EB550023337000E01C1CDD
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
:1004700092035A6102230372827980235B42134301
:100480008371037A9A07FCD57047C0469801002013
:1004900080235B421943C9B28172704770B5A023B3
:1004A00003225B00C254134B134A5C6CC0211440FE
:1004B00089050C4346255C64FF35402444550F4DA7
:1004C00030261D6490256D0046555D6B154029430F
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A80300205C000020B7
:10066000BC18000038B5304B1A681C1C013221D070
:100670002E4A191D1160D9B200291BD12C4A1078BD
:10068000012210402B4A0AD115682B498D4201D115
:1006900010600FE01160294901390029FCD1116077
:1006A000226882F30888FF229343254A93601E4BF9
:1006B0005B681847FFF726FF62B600F09DFD00F06B
:1006C0004FF8204B802252039A601F4B1F4A041C94
:1006D0005A601B4AC021106A09060002000A014341
:1006E000116200229A6007221A60A368201C9847B2
:1006F000174B002801D001221A701A78002A05D061
:10070000002000F08BFA00F003FBFCE71B78002BC5
:10071000EBD100F0E5FD0028E7D0012000F07EFAE3
:1007200000F0F6FAFCE7C0460020000018020020A6
:1007300038040040FC7F00203581730748E8010041
:1007400000ED00E00044004110E000E0E70300009D
:100750007B00002008B5FFF7A3FC00F0C3FA08BD3A
:1007600010B5054B054C2360FFF76AFD201C21687E
:10077000FFF758FD201C10BD005000411C02002056
:1007800070B5051CC0B0081C161C0C1C00F017FF2F
:1007900040006A460323023053701070760801232C
:1007A000E218013A11785A00002906D1281C69463E
:1007B0000023FFF7C9FD40B070BDB342F6DA6846CA
:1007C00081520133ECE70000F7B5BA4A04681378A8
:1007D000B949271CFF37051C102038720B7053785D
:1007E000B648B74E037093783380D17833880902C6
:1007F0000B4333801179B34B198051791888090262
:10080000084318809079B0490880D279088812028C
:1008100002430A8040227A71A84F3A78A64F12020A
:1008200038780F1C0243A9488446181C624500D141
:10083000C2E020DC802149008A4200D16EE109DC5F
:10084000812A00D192E0822A00D195E0802A00D04E
:1008500064E18BE081235B009A4200D1CFE000DAB3
:1008600058E1C0239B009A4200D157E1984B9A422D
:1008700000D14FE152E190231B019A4269D015DC6F
:10088000D023DB009A4222D088231B019A4269D0F0
:10089000A023DB009A4200D040E1201CFFF7E4FDDA
:1008A0003188286889B2FFF7F3FD3BE1894B9A4212
:1008B00000D12FE100DC31E1874B9A4200D11DE1EC
:1008C000864B9A4200D029E133886B7122E133884C
:1008D0001B0A012B08D10B8812222868934201D8E9
:1008E0000A8892B27E4911E133881B0A022B08D193
:1008F0000B8843222868934201D80A8892B279492A
:1009000004E133881B0A032B00D007E13388DBB2F4
:10091000012B17D0002B07D0022B00D0FEE00A8855
:100920002868D2B2704911E0042201A86F4900F092
:1009300035FE3B8804222868934201D83A8892B257
:1009400001A9E3E00A8828686949D2B2FFF718FFD5
:10095000E8E03388201C2B71FFF786FD201CFFF791
:100960009DFDDFE0291C01C90122CFE06149002380
:100970000B8028680222CAE05E4900220A8018889B
:10098000502210405C4A10701E880F2030401880A2
:100990001888032800D9C1E012781B8808335B014E
:1009A000E418A379002A01D09B0600E0DB06DB0FE8
:1009B0000B8028680222A9E019887F2291434E4AC1
:1009C000C9B2117018880F2101401980318800299F
:1009D00000D0A3E01988002900D19FE019880329DD
:1009E00000D99BE012781B8808335B01E318002ACA
:1009F00002D020225A718DE0102159718AE00288BC
:100A00007F239A433C4BD2B21A7001880F220A40CE
:100A100002803288002A00D080E00288002A00D1BB
:100A20007CE00288032A00D978E01B78002B1FD0D5
:100A3000038808335B01E3189B799A066AD503881B
:100A4000202208335B01E3181A71038808335B0125
:100A5000E318DB795F065DD50388402208335B012C
:100A6000E318DA710388022208335B01E3181EE001
:100A7000038808335B01E3189B79D9064AD50388BC
:100A8000102208335B01E3181A71038808335B01F5
:100A9000E318DB799A063DD50388202208335B01F1
:100AA000E318DA710388012208335B01E3181A7135
:100AB00030E0C046980000207D0000208200002029
:100AC0008400002086000020800000200203000037
:100AD0000103000021200000A121000021220000CC
:100AE0000C16000004000020F4150000E4150000BE
:100AF000E81500007E0000207C0000200B88082202
:100B00002868934201D80A8892B207490023FFF768
:100B10001BFC07E0201CFFF7A7FC03E0201C0121C1
:100B2000FFF798FCF7BDC0464800002007B5054B0D
:100B30000122019001A91868131CFFF705FC012090
:100B40000EBDC0461C02002013B5054B6C46073491
:100B50001868211C0122FFF73FFC207816BDC04613
:100B60001C02002010B5074C201CFFF719FB031CCA
:100B70000020834205D022684823FF33D05C012344
:100B8000184010BD1C02002010B5054A0C1C031CA7
:100B9000191C10680123221CFFF7D6FB201C10BD76
:100BA0001C02002070B5084C061C201C0D1CFFF711
:100BB000F7FA0023984205D02068311C2A1CFFF761
:100BC0000BFC031C181C70BD1C020020F8B50C4C5B
:100BD000051C201C0E1CFFF7E3FA0023271C341C05
:100BE00098420AD0002C07D0291C221C3868FFF735
:100BF000F3FB241A2D18F5E7331C181CF8BDC0466A
:100C00001C02002008B5031C081C111C9847024B4D
:100C100064221A8008BDC0468C000020012805D13E
:100C2000054B064A1A60064B187004E0002802D1F2
:100C3000044A014B1A6070478C02002040160000E5
:100C4000940000208C16000030B50A1C1C4985B0A9
:100C50000978031C00292AD0042A01D1006804E085
:100C6000022A01D1008800E00078520004A98B1804
:100C70000B3B9C1AA3420BD00F210140092902D83B
:100C80003025294300E0373119700009013BF1E7B5
:100C900001A930230B7078234B700A208B189870B1
:100CA0000D20D870074B04321B68D86803E0054953
:100CB0000968C868191CFFF7A5FF05B030BDC0461C
:100CC000880000208C02002072B6EFF30883044AEB
:100CD0001360036883F30888436818477047C04669
:100CE00090020020084B1A88002A03D01A88013A83
:100CF00092B21A80054B1A88002A03D01A88013A4A
:100D000092B21A807047C0468C0000208A000020F2
:100D1000F0B591B008A9CC4A0B1C31CA31C351CAF5
:100D200051C360CA60C3C94BC9489A687A25520347
:100D3000520F92005258C74902609C68A4B26243A5
:100D40000C60C54900240A60C44A1460C44C257074
:100D5000C44CC54D2368281C1B69402198470028B6
:100D600002D0C24B64221A80C14B00221860C14BD2
:100D70001D60C14BC04DBE4F1A602A683B689A4245
:100D8000E6D2BC4B1B681A78FF2A00D114E2232A52
:100D900000D0EBE1B94E3378002B06D0B14BB84907
:100DA0001B680222D868FFF72DFFAD4B1B78532B31
:100DB0003CD13B682A6893421ED9AE4801322A6072
:100DC0009A1AB04B01681B6801310160AE4E9A421D
:100DD00001D2326000E03360A048326800680490BD
:100DE00000F0DCFB336829685A182A60A14A1668AB
:100DF000F1181160A54A13702B68013B2B609D4BC5
:100E00001A68013A1A60A14B9E4A1B7811688B42FE
:100E10000AD222689148C91A00689269904700284E
:100E200002D0924B64221A80C0468DE1522B0AD127
:100E30008A48944A2368006811685B690390984760
:100E40006422934B0DE04F2B05D1844B8D4A1B68D8
:100E500012681A7078E1482B05D1804B894A1B68CB
:100E600012681A8070E1572B05D17C4B854A1B68AC
:100E700012681A6068E16F2B03D1784B0121186862
:100E800007E0682B08D1754B7E481B6802211B8840
:100E90000360FFF7D9FE57E1772B06D16F4B7948F6
:100EA0001B6804211B680360F3E7472B13D1754BC4
:100EB0001868FFF709FF774B1B6883F3088862B651
:100EC000754B1B78002B00D13EE1664B06201B685A
:100ED0001B68984738E1542B04D101233370614BD0
:100EE0001B6864E04E2B0CD13378002B06D15D4B90
:100EF00063491B680222D868FFF784FE0023337021
:100F000022E1562B57D123686449D8680122FFF7A4
:100F100079FE23686249D8680322FFF773FE614DAA
:100F20002368291CD8680122FFF76CFE23685E49FC
:100F3000D8680D22FFF766FE2368291CD8680122B5
:100F4000FFF760FE4B4F4C4D5849002339602B6032
:100F50003A1C281C13685E1C16601B780593002B36
:100F600003D0036801330360F4E73E4E2A68336818
:100F7000D868FFF747FE33684A49D8680122FFF76F
:100F800041FE059929604A4939603A4A1368581C5C
:100F900010601B78002B04D0374B1A6801321A609E
:100FA000F3E733682A68D868FFF72CFE3368D868FF
:100FB00033490222C6E0334A582B17D1244E264D1E
:100FC000366813682A68B10093420AD21F4D580848
:100FD000E861384828801D4D287DC607FBD55B1881
:100FE000F2E7204B34491B68D868AAE0592B79D125
:100FF00012681A4B3149002A02D11B680B606CE061
:10100000124D086819686B68104E8025AB43920832
:101010007360002A61D02A4B0C4D2B800B4E337D20
:10102000DD07FBD500230A4D2D680195AD08AB42C5
:1010300003D3244D054E358046E09342F9D09D0000
:10104000465901334E51EEE72016000000400041A2
:10105000440200203C0200203802002088020020C8
:10106000340200208C020020480200208A00002068
:101070002C020020300200204002002088000020C6
:101080008016000094020020980200202802002010
:101090008C00002090020020940000205C160000CC
:1010A000851600005E160000A816000060160000FD
:1010B0006C16000002A5FFFF7516000090000020CE
:1010C00044A5FFFF04A5FFFF3F4E357DEE07FBD58E
:1010D0009D0049194019D21A9BE73C4B3C491B68BB
:1010E000D8682EE05A2B2FD13A4B17681D6800267E
:1010F000EF19BD4206D02878311C00F013F90135F4
:10110000061CF6E7314B34491B680122D868FFF70B
:1011100079FD07230F223240111C36093031092A8C
:1011200000DD07311820C0186A468154013BF1D216
:10113000236806A9D8680822FFF764FD23682749B9
:10114000D8680322FFF75EFD254B7A221A70254BE3
:1011500000221A60244B1B7893422DD01B4B23494D
:101160001B680122D868FFF74DFD25E0111C3039BE
:10117000C8B21C4B092804D81D682A011143196004
:101180001AE0111C4139052903D81E68373A31018C
:1011900006E0111C6139052904D81868573A010185
:1011A0000A4308E02C2A03D10A4A1968116001E0B9
:1011B0000B490A7000221A600D4B1A6801321A603E
:1011C0000C4B1A680132D5E5004000418C0200202A
:1011D00079160000880200207D1600007F160000AE
:1011E00034020020940200208800002083160000B2
:1011F000400200203002002010B51C4B01201A785C
:10120000032402431A701A4B0F2219789143197064
:1012100019782143197017490C7820430870197800
:101220000A401A701A7830210A431A70124B802132
:101230001A6A0A431A62114B114A5A805A7852B2FA
:10124000002AFBDBC4220F480F499203FEF75CFF24
:101250000E4A002313700E4A13700E4A13700E4A82
:1012600013700E4A13700E4A137010BDD64400411D
:10127000BB440041D744004100040040000C004042
:1012800019400000001C00422AF600009C020020C9
:10129000230300209D020020A00200202403002040
:1012A0002103002008B5C1B20248FEF75BFF012010
:1012B00008BDC046001C0042024B187E4007C00F0C
:1012C0007047C046001C004208B5FFF7F5FF002834
:1012D000FBD00248FEF74CFF08BDC046001C004290
:1012E00008B5FFF7E9FF0023984205D0FFF7ECFFB0
:1012F000031C233B5A425341181C08BD70B5041C03
:101300000D1C4618B44204D02078FFF7CBFF0134FF
:10131000F8E7281C70BD10B5041CFFF7D5FF20703E
:10132000012010BD0B0A5840034B4000C05A09026F
:10133000484080B27047C046B6160000F7B500249A
:10134000051C0F1C261CBC4220D0FFF7BDFF114B13
:10135000C0B21B780190002B1AD1311CFFF7E2FFBD
:101360000D4B061C1A88002A04D10C4A11782A1C3D
:10137000002907D001996A1C2970802F02D1198891
:10138000013919800134A4B2151CDCE7301C00E0DF
:101390000120FEBD210300209E0200202203002028
:1013A000F0B53E4E85B0002203900C1C32703C4BD1
:1013B000914201D1012201E03A490C801A707F2349
:1013C0001C4201D080349C43FFF77EFF3378C0B2CB
:1013D000002B07D000253570FFF776FF3378C0B2B9
:1013E000AB4236D1432803D0712853D01528EBD116
:1013F000012300930120FFF755FF0098FFF752FFEC
:1014000000998025C843C0B2FFF74CFF039B00271B
:101410000293244A1388002B1DD121490193097896
:10142000002918D10198FFF73DFF391C0198FFF7FB
:1014300079FF013D071C002DEBD1000AC0B2FFF778
:1014400031FFF8B2FFF72EFFFFF73EFF3378002B96
:101450000AD035701FE00299013B09781380029B86
:10146000019101330293DDE7C0B2062807D1009B4A
:1014700003990133DBB280310093803C0391002C4F
:10148000B8D10420FFF70EFFFFF71EFF044B012524
:101490001C7000E00025281C05B0F0BD21030020D1
:1014A000220300209E020020F0B5384C87B00023B4
:1014B00001902370994201D1012301E0344A118047
:1014C000344A642613704320FFF7ECFE324FFFF7D7
:1014D000F3FE002803D1002F03D0013FF7E7002FD0
:1014E00003D1013E002EEED14DE00125FFF7ECFEC9
:1014F0002378002B38D1C0B20290012805D00428EF
:101500003DD10620FFF7CEFE39E005AE0221301CAA
:10151000FFF714FF01988021FFF710FF2378039055
:10152000002B18D1FFF7D0FE0702FFF7CDFEBFB2A8
:1015300023783F18BFB2012B0DD0039B9F4207D1E8
:101540003378AB4204D1EB437278DBB29A4204D0D9
:101550001820FFF7A7FE002303E00620FFF7A2FEF6
:10156000029B2278002A02D0002626700BE0012B75
:1015700005D1019A6B1C8032DDB20192B6E7054AB3
:10158000002313700126301C07B0F0BD210300209A
:101590009E0200202203002000350C0010B500231D
:1015A000934203D0CC5CC4540133F9E710BD031C53
:1015B0008218934202D019700133FAE77047002372
:1015C000C25C0133002AFBD1581E7047F8B5C046F3
:1015D000F8BC08BC9E467047F8B5C046F8BC08BCCD
:1015E0009E4670470403090441726475696E6F205A
:1015F0004C4C430041726475696E6F204D4B522014
:1016000057414E20313330300000000012010002FB
:1016100002000040412353000002010200010000CB
:101620000800000010000000200000004000000042
:101630008000000000010000000200000004000023
:10164000A5120000C9120000B9120000FD1200002E
:1016500017130000A1130000A91400007600200059
:101660004E6F7620333020323031370031303A310E
:10167000333A323200580A0D00590A0D005A00233D
:101680000A0D003E00322E30000000002D0B00003D
:10169000490B0000650B0000890B0000A50B000042
:1016A000890B0000CD0B00005B41726475696E6FA1
:1016B0003A58595A5D00000021104220633084409E
:1016C000A550C660E770088129914AA16BB18CC111
:1016D000ADD1CEE1EFF13112100273325222B55288
:1016E0009442F772D662399318837BB35AA3BDD361
:1016F0009CC3FFF3DEE36224433420040114E66458
:10170000C774A44485546AA54BB528850995EEE5B0
:10171000CFF5ACC58DD55336722611163006D77667
:10172000F6669556B4465BB77AA719973887DFF700
:10173000FEE79DD7BCC7C448E5588668A77840082F
:10174000611802282338CCC9EDD98EE9AFF9488950
:1017500069990AA92BB9F55AD44AB77A966A711AC7
:10176000500A333A122AFDDBDCCBBFFB9EEB799BA0
:10177000588B3BBB1AABA66C877CE44CC55C222C17
:10178000033C600C411CAEED8FFDECCDCDDD2AADF0
:101790000BBD688D499D977EB66ED55EF44E133EA7
:1017A000322E511E700E9FFFBEEFDDDFFCCF1BBF40
:1017B0003AAF599F788F8891A981CAB1EBA10CD11A
:1017C0002DC14EF16FE18010A100C230E320045022
:1017D000254046706760B9839893FBA3DAB33DC395
:1017E0001CD37FE35EF3B1029012F322D232354272
:1017F000145277625672EAB5CBA5A89589856EF525
:101800004FE52CD50DC5E234C324A01481046674C1
:10181000476424540544DBA7FAB79987B8975FE774
:101820007EF71DC73CD7D326F2369106B016576611
:101830007676154634564CD96DC90EF92FE9C899FC
:10184000E9898AB9ABA94458654806782768C01861
:10185000E1088238A3287DCB5CDB3FEB1EFBF98BD4
:10186000D89BBBAB9ABB754A545A376A167AF10AB1
:10187000D01AB32A923A2EFD0FED6CDD4DCDAABDE4
:101880008BADE89DC98D267C076C645C454CA23C01
:10189000832CE01CC10C1FEF3EFF5DCF7CDF9BAFB4
:1018A000BABFD98FF89F176E367E554E745E932E51
:0C18B000B23ED10EF01E0000000000004F
:1018BC0001140000090243000201008032090400F7
:1018CC00000102020000052400100104240200059E
:1018DC00240600010524010001070583030800FF0D
:1018EC0009040100020A0000000705810240000003
:1018FC00070502024000000000C2010000000800C1
:0C190C0069000000410000000000000025
:0400000300000615DE
:00000001FF

View file

@ -0,0 +1,502 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
:100140000F4B0F22197891431970197821431970B8
:100150000C490C782043087019780A401A701A78F4
:1001600020210A431A7038BD14400000000C0040E2
:100170000004004000080042006CDC0248440041DA
:100180003444004149440041F7B500230F1C01925B
:100190001D1C994254D001212A4E4000084333705F
:1001A000C1B2294B0322588B1C1C000910400128A6
:1001B00004D05B8B1B091A40022AF2D1606AC00A84
:1001C000C00208436062217E1F4B0122880708D4C9
:1001D000197E1142F7D05968C02292020A435A6030
:1001E00003E05B8B9B08134201D0002528E03270AE
:1001F000237E9907FCD5154A154B117801251970F6
:100200006268BD4212D0134B022013406360FFF7B7
:1002100047FF33785A1C3270227E9007FCD50B4979
:100220000B480A780135C254EDB2E9E78023DB02BE
:10023000134363600199002902D00320FFF730FFC8
:10024000281CFEBD7800002000080042280800425B
:1002500099000020FFFFFBFF024B00221870024BA9
:100260001A7070477A00002079000020F8B5274BFB
:100270001C786400E4B2264B03215D8B1A1C2D0907
:100280000D40012D04D05B8B1B0919400229F2D1CE
:10029000536ADB0ADB0223435362117E01231942B6
:1002A000FBD01B49498B8908194204D00320FFF772
:1002B000F7FE022427E017490D782B1C002B11D0E4
:1002C000154EEC1A365D154C2670114E177E012422
:1002D000768B274202D12642F7D00BE0B6082642A1
:1002E0000ED007E00B701C1C00280CD00320FFF779
:1002F000D7FE08E003200B700324FFF7D1FE02E0D5
:10030000013BDBB2DAE7201CF8BDC0467A000020D2
:1003100000080042790000207B00002028080042ED
:10032000034A1378591C1170024AD05401207047B7
:10033000790000207B000020154A164B1178002917
:1003400009D11549187809784118C9B21970802067
:1003500012494003C86111780131C9B2117019788E
:10036000F02902D81978092909D80B4908784042A0
:10037000C0B20870187809784118C9B2197012789B
:100380001B789A4203D18022044B5203DA617047F2
:100390007D000020010000200000002000440041FA
:1003A00010B5041C6B20FFF757FF201CFFF7B8FFA8
:1003B0000120FFF75BFF01210A1C6B20FFF7E4FE21
:1003C000014B187810BDC0469900002038B5051CB7
:1003D0006B200C1CFFF740FF281CFFF7A1FF201C1F
:1003E000FFF79EFF0120FFF741FF022038BD08B54F
:1003F0000520FFF7D5FFCE23011C19400520FFF78C
:10040000E5FF012008BD000010B5041C0020FFF727
:10041000C7FF78232D4A9843C1B2944242D018D8DE
:100420002B4B9C4238D009D82A4B9C4230D02A4BC7
:100430009C422FD0294B9C4245D13FE0284B9C4207
:100440002CD0284B9C422BD0274B9C423BD12023C5
:1004500033E0264A94422BD00AD8254B9C4223D025
:10046000244B9C4222D0244B9C422CD1402324E09C
:10047000224A94421ED004D8214B9C4223D16023AF
:100480001BE0204A944217D01F4A944215D01AE02C
:10049000082312E0102310E018230EE028230CE0BC
:1004A00030230AE0382308E0482306E0502304E024
:1004B000582302E0682300E0702319430020FFF76F
:1004C00085FF012000E0002010BDC046581100004B
:1004D00018100000780F0000C80F0000280F00005F
:1004E000B810000008110000681000009812000009
:1004F000F811000048120000A81100003813000095
:10050000E812000088130000D813000010B5041C86
:100510000020FFF745FF07239843E122C1B2920074
:10052000944220D008D8962C18D0FA235B009C4225
:1005300017D0642C22D11CE0114A944215D005D862
:100540009623DB009C4219D1042311E0FA22D20049
:1005500094420CD00B4A94420AD00FE0012421436C
:1005600007E0022304E0032302E0052300E0062362
:1005700019430020FFF72AFF012000E0002010BDF2
:10058000DC050000B80B000070B504AC267805ACA3
:100590002578441EA041C401002901D040210C430C
:1005A000002A01D020221443002B01D010231C4329
:1005B000002E01D008231C43002D01D004231C432E
:1005C0000220FFF7EDFE0125011C294021430220F6
:1005D000FFF7FCFE281C70BD10B5041C0420FFF7BB
:1005E000DFFE03231840084B9C4204D0074B9C427B
:1005F00008D1B02100E0982101430420FFF7E6FE76
:10060000012000E0002010BD10100000701000005C
:1006100008B50120FFF7C4FECF23011C19400120BB
:10062000FFF7D4FE012008BD07B5FFF7E0FEFFF796
:10063000EFFF0948FFF7E8FEFA20C000FFF766FF6A
:10064000002300930193181C191C1A1CFFF79CFF30
:100650000248FFF7C1FF07BD08110000101000009D
:1006600008B50348FFF72EFDFFF7DEFF08BDC046C3
:10067000A086010010B5C3699C07FCD4036802245E
:10068000A3430360C46901231C42FBD104682343D4
:1006900003600368DC07FCD4C46901231C42FBD15E
:1006A000C469DC401C42F7D1084B1A430260C3699D
:1006B0005A07FCD4C0239B0243608181C3699C0715
:1006C000FCD4036802221343036010BD0400004001
:1006D000037EDA07FCD5018570470000027E012306
:1006E0005107FBD5428B1A4207D1428BDA401A429E
:1006F00003D1428B92081A4202D0034B01221A7096
:10070000008DC0B27047C0467E00002070B50368FF
:10071000041C988B1A1C0821FF32084226D0802026
:1007200099839872112353704021144B9171507129
:100730005E68134DC0202E40800506435E605E69F2
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
:1007B0002021DA6901200A43DA61344B06241A78D1
:1007C00002431A70324B0F2219789143197019782D
:1007D000214319702F490C782043087019780A407A
:1007E0001A701A7860210A431A702B4B2B4A5A80D0
:1007F0005A7852B2002AFBDB294B01211A780A43AE
:100800001A709A78D107FCD426480268510B1F222F
:100810001140914200D1052111408C011D8D2249CA
:100820002940214319850468A10C0A401F2A00D1E0
:100830001D221C8D1F210A408C4322431A85026809
:100840000721D20D0A408A4200D103220A40188DA6
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
:100930009A07FAD5201CFEBD9C0100201C01002056
:10094000FF3F00F0F8B51A4E051C3378141C002B3D
:1009500012D1184B184A1A645A6C920B92035A64BB
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
:1009D00070470000084BFF305A69920B92035A612E
:1009E00002230372827980235B4213438371037A6B
:1009F0009A07FCD57047C0469C01002080235B42CB
:100A00001943C9B28172704770B5A02303225B00FD
:100A1000C254134B134A5C6CC021144089050C432B
:100A200046255C64FF35402444550F4D30261D6437
:100A300090256D0046555D6B1540294392255963FD
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020DC1E000064
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:101060002C1C000004000020141C0000041C0000C4
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A60704790020020601C000036
:1011C00098000020AC1C000030B50A1C1C4985B0FA
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE7401C000000400041F7
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:10160000A01C0000980200209C0200202C02002058
:101610009200002094020020980000207C1C000012
:10162000A51C00007E1C0000C81C0000801C0000DF
:101630008C1C000002A5FFFF951C000094000020F8
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000991C00008C0200209D1C00009F1C0000B2
:1017600038020020980200208E000020A31C0000F8
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D61C0000F7B50024EF
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C2000576946692031303130000000120100024E
:101C300002000040412354000002010200010000A4
:101C4000080000001000000020000000400000001C
:101C500080000000000100000002000000040000FD
:101C60002518000049180000391800007D180000F0
:101C70009718000021190000291A000076002000A2
:101C80004D617220313920323031380030393A34E8
:101C9000353A313400580A0D00590A0D005A002314
:101CA0000A0D003E00322E3000000000AD10000092
:101CB000C9100000E5100000091100002511000006
:101CC000091100004D1100005B41726475696E6F6F
:101CD0003A58595A5D000000211042206330844078
:101CE000A550C660E770088129914AA16BB18CC1EB
:101CF000ADD1CEE1EFF13112100273325222B55262
:101D00009442F772D662399318837BB35AA3BDD33A
:101D10009CC3FFF3DEE36224433420040114E66431
:101D2000C774A44485546AA54BB528850995EEE58A
:101D3000CFF5ACC58DD55336722611163006D77641
:101D4000F6669556B4465BB77AA719973887DFF7DA
:101D5000FEE79DD7BCC7C448E5588668A778400809
:101D6000611802282338CCC9EDD98EE9AFF948892A
:101D700069990AA92BB9F55AD44AB77A966A711AA1
:101D8000500A333A122AFDDBDCCBBFFB9EEB799B7A
:101D9000588B3BBB1AABA66C877CE44CC55C222CF1
:101DA000033C600C411CAEED8FFDECCDCDDD2AADCA
:101DB0000BBD688D499D977EB66ED55EF44E133E81
:101DC000322E511E700E9FFFBEEFDDDFFCCF1BBF1A
:101DD0003AAF599F788F8891A981CAB1EBA10CD1F4
:101DE0002DC14EF16FE18010A100C230E3200450FC
:101DF000254046706760B9839893FBA3DAB33DC36F
:101E00001CD37FE35EF3B1029012F322D23235424B
:101E1000145277625672EAB5CBA5A89589856EF5FE
:101E20004FE52CD50DC5E234C324A014810466749B
:101E3000476424540544DBA7FAB79987B8975FE74E
:101E40007EF71DC73CD7D326F2369106B0165766EB
:101E50007676154634564CD96DC90EF92FE9C899D6
:101E6000E9898AB9ABA94458654806782768C0183B
:101E7000E1088238A3287DCB5CDB3FEB1EFBF98BAE
:101E8000D89BBBAB9ABB754A545A376A167AF10A8B
:101E9000D01AB32A923A2EFD0FED6CDD4DCDAABDBE
:101EA0008BADE89DC98D267C076C645C454CA23CDB
:101EB000832CE01CC10C1FEF3EFF5DCF7CDF9BAF8E
:101EC000BABFD98FF89F176E367E554E745E932E2B
:0C1ED000B23ED10EF01E00000000000029
:101EDC0001140000090243000201008032090400D1
:101EEC000001020200000524001001042402000578
:101EFC00240600010524010001070583030800FFE7
:101F0C0009040100020A00000007058102400000DC
:101F1C00070502024000000000C20100000008009A
:0C1F2C00690000004100000000000000FF
:0400000300000B816D
:00000001FF

0
bootloaders/mkrzero/samd21_sam_ba_arduino_mkrzero.bin Normal file → Executable file
View file

View file

@ -218,7 +218,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,7 +218,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,7 +218,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -218,7 +218,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,7 +222,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,7 +222,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,7 +222,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -222,7 +222,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,7 +226,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,7 +226,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,7 +226,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

View file

@ -226,7 +226,11 @@ void I2S_Handler ( void );
* \brief Configuration of the Cortex-M0+ Processor and Core Peripherals
*/
#define LITTLE_ENDIAN 1
#if defined(LITTLE_ENDIAN) && (LITTLE_ENDIAN != 1)
#error "Little Endian is already defined, but to different value than expected?!"
#else
#define LITTLE_ENDIAN 1
#endif
#define __CM0PLUS_REV 1 /*!< Core revision r0p1 */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of bits used for Priority Levels */

Binary file not shown.

Binary file not shown.

View file

View file

View file

View file

View file

Some files were not shown because too many files have changed in this diff Show more