15 Commits
Author SHA1 Message Date
klassents 47804d8382 Обновлен bootloader
- Притяжка к питанию на Rx
- Новая команда для full erase
- При получении "мусорных" байтов не реагируем и отключаемся по таймауту
2024-09-10 12:15:53 +03:00
klassents f7923e8bf7 Удалить bootloaders/ace-uno/elbear_fw_bootloader_qpi_xip_cshigh_0.hex 2024-09-10 12:13:40 +03:00
klassents f6fec5f3ca Удалить bootloaders/ace-uno/bootloader.hex 2024-09-10 12:13:34 +03:00
klassents 82fbe4939e Merged with dev_beta 2024-09-05 08:49:43 +03:00
klassents 079b3c19bc Добавлен файл Add_board.PNG 2024-09-03 10:55:46 +03:00
klassents 8dcd341b77 Удален файл Add_board.PNG 2024-09-03 10:54:25 +03:00
klassents d32773e7b8 Обновила ссылку, надеюсь на финальную версию 2024-09-03 10:54:09 +03:00
klassents 687984b356 Merged with dev0.1.0 2024-09-03 08:02:24 +03:00
ogneyar fa310cfa0d Merged with dev 2024-08-31 14:56:58 +03:00
ogneyar 7e64bd224e Merged with dev 2024-08-25 15:07:33 +03:00
ogneyar e37ab059a3 Merged with dev 2024-08-23 16:00:00 +03:00
ogneyar 926f03b87f Merged with dev 2024-08-22 16:33:25 +03:00
ogneyar 594ee96ffe Merged with dev 2024-08-22 14:01:22 +03:00
ogneyar f8c00f6086 Merged with dev 2024-08-21 16:23:14 +03:00
ogneyar 8977dc59e1 Merged with dev 2024-08-21 15:41:11 +03:00
30 changed files with 469 additions and 579 deletions

No files matched your search

+1
View File
@@ -0,0 +1 @@
installed.json
+51
View File
@@ -0,0 +1,51 @@
# elbear_arduino_bsp
Пакет поддержки платы Elbear Ace-Uno на базе микроконтроллера MIK32 Амур в среде программирования Arduino IDE.
## Установка пакета в ArduinoIDE
1. Установите [Arduino IDE](https://www.arduino.cc/en/software).
2. Откройте меню `Файл -> Параметры`.
3. Вставьте данную ссылку в поле "Дополнительные ссылки для Менеджера плат":
`https://elron.tech/files/package_elbear_beta_index.json`
![Add_board](docs/Add_board.PNG)
4. Откройте меню `Инструменты -> Плата -> Менеджер плат...`.
5. В поиске найдите плату `Elbear Ace-Uno`, выберите нужную версию и нажмите кнопку `Установить`.
![Install_board](docs/Install_board.PNG)
6. Процесс установки может занять некоторое время. Результаты установки отобразятся в поле `Вывод`, а так же во всплывающих уведомлениях.
![Installation_process](docs/Installation_process.PNG)
Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плату Elbear Ace-Uno была загружена специальная программа-загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader)). Если она уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия программы-загрузчика входит в состав пакета поддержки, отдельно скачивать её не нужно.
Платы ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно загруженной программой-загрузчиком.
## Загрузка программы-загрузчика через ArduinoIDE
1. Подключите плату Elbear Ace-Uno к ПК через программатор ELJTAG.
2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`.
3. Для загрузки программы-загрузчика выберите `Инструменты -> Записать Загрузчик`.
![Bootloader](docs/Bootloader.png)
4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO.
Теперь можно загружать скетчи в плату по USB.
## Начало работы
1. Подключите плату к ПК по USB.
2. Откройте ArduinoIDE и загрузите необходимый скетч. Для начала работы можно воспользоваться готовыми примерами, например - `Файл -> Примеры -> 01.Basics -> Blink`.
![Blink_example](docs/Blink_example.png)
3. Выберите активную плату - `Инструменты -> Плата`.
![Set_board](docs/Set_board.png)
4. Выберите используемый COM порт - `Инструменты -> Порт`.
![Set_port](docs/Set_port.png)
Выбранные плата и порт в ArduinoIDE должны отображаться следующим образом:
![Selected_board_port](docs/Selected_board_port.png)
5. Проверьте скетч, нажав соответствующую кнопку.
![Build_project](docs/Build_project.png)
6. Загрузите полученную прошивку на плату.
![Flash_project](docs/Flash_project.png)
7. При необходимости можно открыть терминал и получать сообщения от платы по интерфейсу Serial. Для этого выберите `Инструменты -> Монитор порта`.
![Monitor](docs/Monitor.png)
При возникновении вопросов или выявлении проблем можно оставить заявку [здесь](https://gitflic.ru/project/elron-tech/elbear_arduino_bsp/issue).
# Полезные ссылки
* [Описание платы и ее распиновка](https://elron.tech/russian-arduino-compatible-board/)
* [Материалы для плат разных ревизий](https://elron.tech/materialy-dlja-elbear-ace-uno/)
+52 -2
View File
@@ -1,6 +1,8 @@
# See: https://arduino.github.io/arduino-cli/latest/platform-specification/ # See: https://arduino.github.io/arduino-cli/latest/platform-specification/
############################################################## ##############################################################
aceUno8Mb.name=Elbear Ace-Uno 8Mb
##################### Ace-Uno 8 Mb #####################
aceUno8Mb.name=Elbear Ace-Uno 8 Mb
# tool for firmware update # tool for firmware update
aceUno8Mb.upload.tool=elbear_uploader aceUno8Mb.upload.tool=elbear_uploader
@@ -16,8 +18,56 @@ aceUno8Mb.bootloader.file=ace-uno/bootloader.hex
# build options # build options
aceUno8Mb.build.mcu=MIK32_Amur aceUno8Mb.build.mcu=MIK32_Amur
aceUno8Mb.build.f_cpu=32000000UL aceUno8Mb.build.f_cpu=32000000UL
aceUno8Mb.build.board=ACE_UNO_8Mb aceUno8Mb.build.board=ACE_UNO_8MB
aceUno8Mb.build.core=arduino aceUno8Mb.build.core=arduino
aceUno8Mb.build.variant=standart aceUno8Mb.build.variant=standart
aceUno8Mb.build.extra_flags= aceUno8Mb.build.extra_flags=
aceUno8Mb.build.flags= aceUno8Mb.build.flags=
##################### Ace-Uno 16 Mb #####################
aceUno16Mb.name=Elbear Ace-Uno 16 Mb
# tool for firmware update
aceUno16Mb.upload.tool=elbear_uploader
aceUno16Mb.upload.protocol=elbear_uploader
aceUno16Mb.upload.maximum_size=16777216
aceUno16Mb.upload.maximum_data_size=16384
# tool for bootloader update
aceUno16Mb.bootloader.tool=mik32_upload
aceUno16Mb.bootloader.tool.default=mik32_upload
aceUno16Mb.bootloader.file=ace-uno/bootloader.hex
# build options
aceUno16Mb.build.mcu=MIK32_Amur
aceUno16Mb.build.f_cpu=32000000UL
aceUno16Mb.build.board=ACE_UNO_16MB
aceUno16Mb.build.core=arduino
aceUno16Mb.build.variant=standart
aceUno16Mb.build.extra_flags=
aceUno16Mb.build.flags=
##################### Ace-Uno 32 Mb #####################
aceUno32Mb.name=Elbear Ace-Uno 32 Mb
# tool for firmware update
aceUno32Mb.upload.tool=elbear_uploader
aceUno32Mb.upload.protocol=elbear_uploader
aceUno32Mb.upload.maximum_size=33554432
aceUno32Mb.upload.maximum_data_size=16384
# tool for bootloader update
aceUno32Mb.bootloader.tool=mik32_upload
aceUno32Mb.bootloader.tool.default=mik32_upload
aceUno32Mb.bootloader.file=ace-uno/bootloader.hex
# build options
aceUno32Mb.build.mcu=MIK32_Amur
aceUno32Mb.build.f_cpu=32000000UL
aceUno32Mb.build.board=ACE_UNO_32MB
aceUno32Mb.build.core=arduino
aceUno32Mb.build.variant=standart
aceUno32Mb.build.extra_flags=
aceUno32Mb.build.flags=
+219 -215
View File
@@ -1,15 +1,15 @@
:020000040100F9 :020000040100F9
:10000000FD62938202400100FD12E39E02FE374131 :10000000FD62938202400100FD12E39E02FE374131
:10001000000213010100B701000293810100B7152E :10001000000213010100B701000293810100B7152E
:100020000001938505F137160001130606F4B706A3 :100020000001938505F537160001130606F8B7069B
:1000300000029386060039A083A2050023A0560083 :1000300000029386060039A083A2050023A0560083
:1000400091059106E3EAC5FEB7150001938505F415 :1000400091059106E3EAC5FEB7150001938505F811
:1000500037160001130606F4B7060002938606263B :1000500037160001130606F8B70600029386062637
:1000600039A083A2050023A0560091059106E3EA7A :1000600039A083A2050023A0560091059106E3EA7A
:10007000C5FEB70500029385050337060002130687 :10007000C5FEB70500029385050337060002130687
:10008000062621A023A005009105E3EDC5FEB700DB :10008000062621A023A005009105E3EDC5FEB700DB
:100090000001E780C00AB7000001E780C00AB7008E :100090000001E780C00AB7000001E780C00AB7008E
:1000A0000001E780007273005010F5BF82800000ED :1000A0000001E780207B73005010F5BF82800000C4
:1000B0000000000000000000000000000000000040 :1000B0000000000000000000000000000000000040
:1000C0006F004000197106C20AC40EC612C816CAD3 :1000C0006F004000197106C20AC40EC612C816CAD3
:1000D0001ACC1ECE22D026D22AD42ED632D836DA48 :1000D0001ACC1ECE22D026D22AD42ED632D836DA48
@@ -32,216 +32,220 @@
:1001E00027009702000096968682E78086FA96801E :1001E00027009702000096968682E78086FA96801E
:1001F000C1171D8F3E96E374C3F8A5B7B707050076 :1001F000C1171D8F3E96E374C3F8A5B7B707050076
:100200000947D8CFB7170500938707C0984385667D :100200000947D8CFB7170500938707C0984385667D
:1002100093860640558F98C3B71708009387074009 :1002100093860640558F98C398471367074098C741
:1002200023A0070023A2070023A407001307A008A8 :10022000B71708009387074023A0070023A2070001
:10023000D8C77D57D8CF354798C3D84F9356570165 :1002300023A407001307A008D8C77D57D8CF354798
:100240008D8AE5DE8280B71708009387074023A0D8 :1002400098C3D84F935657018D8AE5DE8280B71741
:10025000070023A2070023A4070023A607007D5759 :1002500008009387074023A0070023A2070023A4D8
:10026000D8CF23A40702B7170500938707C0984388 :10026000070023A607007D57D8CF23A40702B7179E
:10027000F1769386F63F758F98C3B7070500D84F80 :100270000500938707C09843F1769386F63F758F04
:1002800023AE07008280B71708009387074088D7FE :1002800098C398471377F7BF98C7B7070500D84FAB
:10029000D84F137707046DDF828037070002B71548 :1002900023AE07008280B71708009387074088D7EE
:1002A000080037460F0023200704814781469385C5 :1002A000D84F137707046DDF8280370700020323DE
:1002B000054013061624C84D137505020DC991CECD :1002B000C703B706000237150800B7450F0023A093
:1002C0002320F70437470F00130707246397E7003D :1002C000060481470146130505409385152403283C
:1002D000B707000205472383E700B7170800938795 :1002D000C501B308F30013780802630C080205C2D5
:1002E0000740C8534205418182808546E9B78507AA :1002E000232E170337470F0023A0F6041307072414
:1002F000E39DC7FEFDD2B7470F0093870724232055 :1002F0006397E700B707000205472383E700B717B6
:10030000F704F9B74111B707000222C413870700A9 :10030000080093870740C853420541818280054613
:1003100006C6834667000547138407006390E6021C :100310007DBF8507E39DB7FE7DD2B7470F0093876A
:100320001305000F8D37B717080093870740D84F84 :10032000072423A0F604232E1703E9B7411106C6BC
:10033000218B09C7D84F13678700D8CF2303040048 :1003300022C426C2AA84EF003019E1689388086AB3
:10034000B240224441018280411106C622C426C225 :1003400001488147014781460146B70520C72685F8
:10035000AA84EF009013E1689388086A01488147F6 :1003500037949800EF00A07C130414687D1419E40E
:10036000014781460146B70520C726853794980086 :100360000D45B24022449244410182808545268554
:10037000EF000077130414687D1419E40D45B240B2 :10037000EF00F01605897DF10145E5B7411122C472
:10038000224492444101828085452685EF00501128 :1003800037040002930704008C43B70700804AC07B
:1003900005897DF10145E5B7411122C4370400020A :10039000BE95B707000223AAB70206C626C29397E6
:1003A000930704008C43B70700804AC0BE95B70787 :1003A0004501130404003709000289E71305890099
:1003B000000223ACB70206C626C293974501130478 :1003B000EF0010200C40B70400029386440413069B
:1003C00004003709000289E713058900EF00701A5D :1003C000001013058900EF00F0191C4037070002E8
:1003D0000C40B70400029386440413060010130572 :1003D00083562703938707101CC013060010B687A7
:1003E0008900EF0050141C40370700028356470372 :1003E00063F4C60093070010138444041305F4005B
:1003F000938707101CC013060010B68763F4C6006D :1003F000938707F01306100F814513040410231987
:1004000093070010138444041305F400938707F046 :10040000F702893BA285138544043D46EF00901E08
:100410001306100F814513040410231AF7021D3B25 :1004100023200400232204002324040023160400C4
:10042000A285138544043D46EF00F0182320040004 :1004200023070400B24022449244024941018280E1
:1004300023220400232404002316040023070400BD :100430005D71130680028145280886C6213BBD47B1
:10044000B240224492440249410182805D71130608 :10044000230CF1008947230EF1003ED2E177938718
:1004500080028145280886C6F539BD47230CF10086 :1004500007082C080A85231AF1028523B64061613A
:100460008947230EF1003ED2E177938707082C08D5 :1004600082805D71A2C4370400021305840086C631
:100470000A85231AF1021923B640616182805D71F9 :10047000A6C2092D13058400EF00207489451305D9
:10048000A2C4370400021305840086C6A6C2652BE9 :100480008400EF00D0059377250085E3AA84854595
:1004900013058400E525894513058400EF0050000D :1004900013058400EF00B00413E62400AA85137648
:1004A0009377250085E3AA84854513058400EF0032 :1004A000F60F13058400EF00F006E1689388086AF0
:1004B000207F13E62400AA851376F60F1305840027 :1004B00001488147014781460146B70520381305A9
:1004C000EF007001E1689388086A0148814701479D :1004C0008400B12DE16838009388086A130800029F
:1004D00081460146B7052038130584001125E168DF :1004D000854681470146B70599EB1305840023043F
:1004E00038009388086A1308000285468147014650 :1004E0000100352DB715000151469385C5F368000D
:1004F000B70599EB1305840023040100D523B71534 :1004F000EF005010930484009C406C0051463ED0A5
:10050000000151469385C5EF6800EF00D00A9304BF :1005000085473ED26810C1673ED4EF00B00EB706F3
:1005100084009C406C0051463ED085473ED2681016 :1005100007009C423707F1FF7D17F98F08109CC236
:10052000C1673ED4EF003009B70607009C42370789 :100520006523B6402644964461618280411106C627
:10053000F1FF7D17F98F08109CC2812BB64026442D :10053000393B053FB707008073905730B700008004
:10054000964461618280411106C6F5390D3FB707B7 :100540008290B240410182804111B707000222C46B
:10055000008073905730B70000808290B240410114 :100550001387070006C68346670005471384070014
:100560008280411106C622C426C24AC08347350094 :10056000639EE600B717080093870740D84F218B9A
:1005700005476383E70811472A846389E7008DCF25 :1005700009C7D84F13678700D8CF4D3F2303040026
:10058000B24022449244024941018280B7070002EE :10058000B240224441018280411106C622C426C2E3
:1005900083D7470391C30935834744000347540079 :100590004AC08347350005476383E70811472A842B
:1005A000E2074207BA9737070002232EF702370700 :1005A0006389E7008DCFB240224492440249410161
:1005B00000022320F700E9B73709000283544903FA :1005B0008280B707000283D7270391C3C1338347E3
:1005C0000346050093054500370500021305450461 :1005C000440003475400E2074207BA973707000286
:1005D0002695EF00407E83470400BE94C204C1808C :1005D000232CF702370700022320F700E9B7370979
:1005E000231A99029307F00FE3FC97F82244B240D4 :1005E000000283542903034605009305450037059F
:1005F0009244024941014DB33D457131B7070002B4 :1005F0000002130545042695EF00C07F83470400E1
:1006000083D7470391C3493B2244B24092440249F5 :10060000BE94C204C180231999029307F00FE3FC42
:10061000410115BF3707000293070700B705000225 :1006100097F82244B24092440249410185B33D45D6
:1006200003DE470083A705043716080037450F008F :100620009D39B707000283D7270391C3813B22443A
:1006300037480F00B708000201438146130707003F :10063000B240924402494101D5BD370700029307F9
:10064000130606401305152413080824938848153B :100640000700B705000203DE470083A7050437163D
:1006500063EEC6016304030023A0F504834767002B :10065000080037450F0037480F00B7080002014374
:10066000A9E73705000213054515E5BD81470323BA :1006600081461307070013060640130515241308D7
:10067000C60113730302631F03008507E399A7FEF6 :1006700008249388481563EEC6016304030023A091
:10068000B7470F009387072423A0F504854723036A :10068000F50483476700A9E7370500021305451500
:10069000F7008280E38607FF832E46023383D8006B :10069000E5BD81470323C60113730302631F0300F3
:1006A00085062300D301054365B78280011122CC62 :1006A0008507E399A7FEB7470F009387072423A088
:1006B0003704000226CA4AC84EC652C406CE1304E6 :1006B000F50485472303F7008280E38607FF832E36
:1006C0000400930400061309E00FB7090002130A9F :1006C00046023383D80085062300D301054365B76E
:1006D0000003E136834764001375F50FA303A400FC :1006D0008280011122CC4EC652C437040002B749B1
:1006E00099C30D31FDB7630F950063042503E31231 :1006E0000F00371ADCBA26CA4AC856C25AC006CE0C
:1006F00045FF3D45493E553605052312A4003D45BD :1006F00013040400370900029389F923930A0003C5
:100700005936C1BF3D454136313783476400F1FB5F :10070000B7040002391A370B000245368327C903A4
:10071000FDB7138589000D397DD11305000FCDB7C5 :10071000A303A40063F3F900113D8347640099C368
:10072000011106CE22CC1D333704000213058400CC :100720002535E5B7834674006388560593070006B0
:10073000192E130584009921E1689388086A0148FD :100730006381F60603C704038D47998F8E07B3576D
:100740008147780085460146B705D9EB130584003B :10074000FA0093F7F70F6393F6069307170093F7F2
:10075000230601007126E168814701478146014671 :10075000F70F2388F4021147639DE7003D45253ECE
:10076000B70538FF9388086A0148130584008D2E69 :1007600013058B00E13629C11305000F2D362388B0
:10077000713437070002B715080037460F002320F1 :100770000402232E090251BF3D45232E090223887E
:100780000704814781469385054013061624C84D0A :100780000402113E1D3605052312A4003D45213605
:100790001375050211CD85CA2320F70437470F00D2 :10079000ADBF3D45232E090223880402ED3C713D87
:1007A000130707246391E702793B01A08546C5B78B :1007A00083476400B5FFDDB73D45C9B72388040220
:1007B0008507E39DC7FE81CAB7470F0093870724CB :1007B000A9BF011106CE22CCA539370400021305CA
:1007C0002320F704D5B7DD350547AA876305E50281 :1007C0008400C92413058400CD2EE1689388086A4B
:1007D00009476300E506054591EBB7060600DC4ACC :1007D00001488147780085460146B705D9EB1305E6
:1007E0007D771307F73FF98FDCCA014582807D17BB :1007E000840023060100252EE1689388086A0148E9
:1007F00019EB0D4582809306004037A707001307C9 :1007F0008147014781460146B70538FF130584004C
:100800000712B7050500905D7D8E75D2370606008C :10080000392EED3AF9350547AA876305E502094710
:100810005C4A7D771307F73FF98FD58F41115CCA8A :100810006300E506054591EBB7060600DC4A7D77E7
:1008200002C613073006B2476359F700014541017C :100820001307F73FF98FDCCA014582807D1719EB6A
:100830008280856693860680C9B7B24785073EC623 :100830000D4582809306004037A707001307071273
:10084000DDB791476307F50263EAA7008547630AAE :10084000B7050500905D7D8E75D2370606005C4ABF
:10085000F50489476309F50405458280A147E31D36 :100850007D771307F73FF98FD58F41115CCA02C628
:10086000F5FE0947094501A8FD1781EFC8D20D45DE :1008600013073006B2476359F70001454101828002
:10087000828005470D45B7A7070093870712B70683 :10087000856693860680C9B7B24785073EC6DDB751
:100880000500905E798E6DD28A05C98D4111CCD25A :1008800091476307F50263EAA7008547630AF50409
:1008900002C613073006B247635AF700014541010B :1008900089476309F50405458280A147E31DF5FEFC
:1008A00082801147C9BF21470145F1B7B24785078B :1008A0000947094501A8FD1781EFC8D20D4582808F
:1008B0003EC6D5B70547AA876305E5020947630227 :1008B00005470D45B7A7070093870712B706050040
:1008C000E506054591EBB70606009C4A7D771307C0 :1008C000905E798E6DD28A05C98D4111CCD202C657
:1008D000F73FF98F9CCA014582807D1719EB0D45C2 :1008D00013073006B247635AF70001454101828091
:1008E00082809306004037A7070013070712B70559 :1008E0001147C9BF21470145F1B7B24785073EC649
:1008F0000500905D7D8E75D2370706001C4B7D7616 :1008F000D5B70547AA876305E50209476302E50600
:100900001306F63FF18FD58F1CCB85471CCF4111C5 :10090000054591EBB70606009C4A7D771307F73F34
:1009100002C613073006B2476359F700014541018B :10091000F98F9CCA014582807D1719EB0D458280B5
:1009200082808566938606807DBFB24785073EC676 :100920009306004037A7070013070712B705050015
:10093000DDB711C98547630DF50205458280FD17B6 :10093000905D7D8E75D2370706001C4B7D761306C1
:1009400091EB0D4582800946B7A7070093870712F0 :10094000F63FF18FD58F1CCB85471CCF411102C6D6
:10095000B7060500985E718F7DD34111C8D602C6D7 :1009500013073006B2476359F70001454101828011
:1009600013073006B2476357F70001454101828003 :100960008566938606807DBFB24785073EC6DDB7A4
:100970000546D9BFB24785073EC6EDB7011126CA65 :1009700011C98547630DF50205458280FD1791EB8E
:10098000B7040600DC4806CE22CC4AC84EC652C484 :100980000D4582800946B7A7070093870712B7066F
:1009900056C2F19BDCC89C482A89C845F19B9CC87B :100990000500985E718F7DD34111C8D602C613073A
:1009A00083C7C5012E848A07DCC883C7D5018A079F :1009A0003006B2476357F700014541018280054692
:1009B0009CC8193D0C44AA8A03454400593518487F :1009B000D9BFB24785073EC6EDB7011126CAB704B5
:1009C000B70705002A8A98C358480850D8C3184C5E :1009C0000600DC4806CE22CC4AC84EC652C456C2E7
:1009D00098C7CD35AA894850A93F834704002A8784 :1009D000F19BDCC89C482A89C845F19B9CC883C709
:1009E00093F6170089E6D44893E62600D4C893F618 :1009E000C5012E848A07DCC883C7D5018A079CC845
:1009F000270099E637060600544A93E6160054CAC3 :1009F000193D0C44AA8A0345440059351848B707E5
:100A000093F6470099E637060600144A93E6260057 :100A000005002A8A98C358480850D8C3184C98C77C
:100A100014CAA18B99E7B70606009C4A93E7170012 :100A1000CD35AA894850A93F834704002A8793F619
:100A20009CCAF24062442320590123224901232415 :100A2000170089E6D44893E62600D4C893F6270039
:100A300039012326E900D244B249224A924A4A8522 :100A300099E637060600544A93E6160054CA93F620
:100A4000424905618280011106CE22CC02C402C651 :100A4000470099E637060600144A93E6260014CAC2
:100A50002147B707050037550800D8C705448D471B :100A5000A18B99E7B70606009C4A93E717009CCA4A
:100A60008A85130505803EC022C2292A3755080011 :100A6000F240624423205901232249012324390101
:100A70009307C0038A851305058022C222C43EC0A5 :100A70002326E900D244B249224A924A4A85424991
:100A80001122F240624405618280411122C406C6EF :100A800005618280011106CE22CC02C402C6214734
:100A90002A84553F18405C4F93E707015CCF1C4404 :100A9000B707050037550800D8C705448D478A8534
:100AA0001CCB5C4085CB1C43B7061000D58F1CC304 :100AA000130505803EC022C2292A37550800930746
:100AB000144C5C48B240D606CE07D58F834604015D :100AB000C0038A851305058022C222C43EC01122CC
:100AC000C206D58F8346C4012244E206D58F1CCFCF :100AC000F240624405618280411122C406C62A8434
:100AD000410182801C43B706F0FFFD16F58FC1BFB0 :100AD000553F18405C4F93E707015CCF1C441CCB8B
:100AE000032305002A8E0325C30113650502232E67 :100AE0005C4085CB1C43B7061000D58F1CC3144C4B
:100AF000A3002324C3001396260149824D8E23268A :100AF0005C48B240D606CE07D58F83460401C206B5
:100B000003012322C300139605016354060299C210 :100B0000D58F8346C4012244E206D58F1CCF410114
:100B10000545B1CB01476346D700639C08020D45EC :100B100082801C43B706F0FFFD16F58FC1BF03238B
:100B200082803386E700034606000507230AC300D8 :100B200005002A8E0325C30113650502232EA300A9
:100B3000DDB799C2054505CB8147E3D0D7FE032633 :100B30002324C3001396260149824D8E23260301E8
:100B40000E00034546013306F70085072300A60083 :100B40002322C300139605016354060299C205458A
:100B5000EDB783270E00FD18DC4F93F70702D5DFB2 :100B5000B1CB01476346D700639C08020D458280F4
:100B600011656D8D11E18280B707070083C74701CA :100B60003386E700034606000507230AC300DDB706
:100B700013F585001D8D3335A00082801C4141474F :100B700099C2054505CB8147E3D0D7FE03260E0079
:100B8000D8CF8280B7470800938707402A8863043C :100B8000034546013306F70085072300A600EDB7AD
:100B9000F508B7570800938707806304F50A3747BD :100B900083270E00FD18DC4F93F70702D5DF1165A0
:100BA0000800630DE50A05458280331E1F01337678 :100BA0006D8D11E18280B707070083C7470113F5F8
:100BB000DE0129C683A345008843139318003396AA :100BB00085001D8D3335A00082801C414147D8CF70
:100BC0006F001346F6FF13F43300718D3314640085 :100BC0008280B7470800938707402A886304F508A6
:100BD000418D88C3638B5302638C0302084303AEC9 :100BD000B7570800938707806304F50A3747080072
:100BE000C500718D331E6E003365C50108C3884290 :100BE000630DE50A05458280331E1F013376DE0161
:100BF000698E884533156500498E90C2850833D5C6 :100BF00029C683A3450088431393180033966F00DA
:100C00001E0145F53244410182802326C801F9B70F :100C00001346F6FF13F43300718D33146400418DE5
:100C10002324C801E1B7B716050037170500B71739 :100C100088C3638B5302638C0302084303AEC50091
:100C20000500938646C1130707C19387C7C083AEEB :100C2000718D331E6E003365C50108C38842698E1D
:100C300005008148054F8D4F914233D51E0105EDCA :100C3000884533156500498E90C2850833D51E015D
:100C40008280B716050037170500B7170500938691 :100C400045F53244410182802326C801F9B72324A7
:100C500006C21307C7C1938787C1D1BFB716050066 :100C5000C801E1B7B716050037170500B71705003B
:100C600037170500B7170500938686C0130747C0DE :100C6000938646C1130707C19387C7C083AE0500AB
:100C7000938707C06DBF331E1F013376DE0119E273 :100C70008148054F8D4F914233D51E0105ED82808D
:100C8000850865BF411122C635B7E1689388086AB7 :100C8000B716050037170500B7170500938606C28B
:100C900001488147014781460146B705200689B5CD :100C90001307C7C1938787C1D1BFB71605003717A0
:100CA000011106CEA307010089476393F502B7053A :100CA0000500B7170500938686C0130747C09387D2
:100CB0002035E1681307F1009388086A01488147ED :100CB00007C06DBF331E1F013376DE0119E28508C0
:100CC00085460146313DF2400345F10005618280D1 :100CC00065BF411122C635B7E1689388086A0148BB
:100CD000B7052005F9BF011106CE22CC26CA23068E :100CD0008147014781460146B705200689B50111C4
:100CE000B100AA84A306C1004D37E1689388086A61 :100CE00006CEA307010089476393F502B7052035B7
:100CF00001487C00014789460146B78520012685C9 :100CF000E1681307F1009388086A01488147854637
:100D00000964F93B130414717D1419E40D45F24094 :100D00000146313DF2400345F10005618280B7059F
:100D10006244D24405618280854526855137058924 :100D10002005F9BF011106CE22CC26CA2306B10058
:100D200065F50145EDB7011106CE22CC26CA2E8409 :100D2000AA84A306C1004D37E1689388086A014888
:100D30004AC8AA84328936C6893FB247E16822860A :100D30007C00014789460146B78520012685096464
:100D40009388086A01480147CA86B78580022685CC :100D4000F93B130414717D1419E40D45F24062441B
:100D5000616479331304146A7D1411C485452685B2 :100D5000D24405618280854526855137058965F530
:100D60008137058975F9F2406244D24442490561F0 :100D60000145EDB7011106CE22CC26CA2E844AC811
:100D70008280011106CE22CC26CA2EC6AA84313723 :100D7000AA84328936C6893FB247E16822869388C1
:100D80003246E1689388086A0148814701478146F5 :100D8000086A01480147CA86B785800226856164E2
:100D9000B705802026856164A1331304146A7D148D :100D900079331304146A7D1411C48545268581377F
:100DA00011C485452685ED3D058975F9F2406244FB :100DA000058975F9F2406244D24442490561828066
:100DB000D24405618280B3C7A5008D8BB308C500FE :100DB000011106CE22CC26CA2EC6AA84313732466D
:100DC000B1E78D4763F4C704937735002A87B9EB01 :100DC000E1689388086A0148814701478146B70571
:100DD00013F6C8FFB306E6409307000263C8D706C0 :100DD000802026856164A1331304146A7D1411C434
:100DE000AE86BA876371C70203A806009107910611 :100DE00085452685ED3D058975F9F2406244D2447A
:100DF00023AE07FFE3EAC7FE9307F6FF998FF19B47 :100DF00005618280B3C7A5008D8BB308C500B1E73C
:100E000091073E97BE956366170182802A87637EAD :100E00008D4763F4C704937735002A87B9EB13F64F
:100E1000150383C7050005078505A30FF7FEE39AB1 :100E1000C8FFB306E6409307000263C8D706AE8654
:100E2000E8FE828083C60500050793773700A30F8D :100E2000BA876371C70203A806009107910623AE33
:100E3000D7FE8505D1DF83C6050005079377370008 :100E300007FFE3EAC7FE9307F6FF998FF19B91073F
:100E4000A30FD7FE8505F9FF61B78280411122C645 :100E40003E97BE956366170182802A87637E1503ED
:100E50001304000283A3050083A2450083AF85002D :100E500083C7050005078505A30FF7FEE39AE8FEA3
:100E600003AFC50083AE050103AE450103A38501B1 :100E6000828083C60500050793773700A30FD7FE5E
:100E700003A8C501945113074702B307E640232E88 :100E70008505D1DF83C60500050793773700A30FEB
:100E800077FC232057FE2322F7FF2324E7FF2326A6 :100E8000D7FE8505F9FF61B78280411122C61304A0
:100E9000D7FF2328C7FF232A67FE232C07FF232E13 :100E9000000283A3050083A2450083AF850003AF52
:100EA000D7FE93854502E347F4FAAE86BA876371AD :100EA000C50083AE050103AE450103A3850103A878
:100EB000C70203A806009107910623AE07FFE3EAE5 :100EB000C501945113074702B307E640232E77FC80
:100EC000C7FE9307F6FF998FF19B91073E97BE955A :100EC000232057FE2322F7FF2324E7FF2326D7FF03
:100ED0006365170132444101828083C7050005071D :100ED0002328C7FF232A67FE232C07FF232ED7FED4
:100EE0008505A30FF7FEE387E8FE83C70500050726 :100EE00093854502E347F4FAAE86BA876371C70279
:100EF0008505A30FF7FEE392E8FEE9BF200000009E :100EF00003A806009107910623AE07FFE3EAC7FEA9
:100F0000010000000300000006000000EB000000EC :100F00009307F6FF998FF19B91073E97BE95636516
:100F10000000008000010000000007000000000049 :100F1000170132444101828083C70500050785051A
:100F200000000000000000000000000000000000C1 :100F2000A30FF7FEE387E8FE83C7050005078505E5
:100F300000000000000000000000000000000000B1 :100F3000A30FF7FEE392E8FEE9BF000020000000E7
:100F4000010000000300000006000000EB000000AC
:100F5000000000800000000000000700000000000A
:100F60000000000000000000000000000000000081
:100F70000000000000000000000000000000000071
:0400000501000000F6 :0400000501000000F6
:00000001FF :00000001FF
@@ -1,247 +0,0 @@
:020000040100F9
:10000000FD62938202400100FD12E39E02FE374131
:10001000000213010100B701000293810100B7152E
:100020000001938505F137160001130606F4B706A3
:1000300000029386060039A083A2050023A0560083
:1000400091059106E3EAC5FEB7150001938505F415
:1000500037160001130606F4B7060002938606263B
:1000600039A083A2050023A0560091059106E3EA7A
:10007000C5FEB70500029385050337060002130687
:10008000062621A023A005009105E3EDC5FEB700DB
:100090000001E780C00AB7000001E780C00AB7008E
:1000A0000001E780007273005010F5BF82800000ED
:1000B0000000000000000000000000000000000040
:1000C0006F004000197106C20AC40EC612C816CAD3
:1000D0001ACC1ECE22D026D22AD42ED632D836DA48
:1000E0003ADC3EDEC2C0C6C2CAC4CEC6D2C8D6CA78
:1000F000DACCDECEE2D0E6D2EAD4EED6F2D8F6DA28
:10010000FADCFEDE970000009380E00482909240CB
:100110002241B2414242D2426243F24302549254DB
:100120002255B2554256D2566257F2570648964863
:100130002649B649464AD64A664BF64B065C965C5B
:10014000265DB65D465ED65E665FF65F096173004A
:10015000203001A03D432A876373C3029377F700E1
:10016000BDEFADE5937606FF3D8ABA960CC34CC34E
:100170000CC74CC74107E36BD7FE11E28280B30680
:10018000C3408A069702000096966780A600230760
:10019000B700A306B7002306B700A305B7002305E1
:1001A000B700A304B7002304B700A303B7002303D9
:1001B000B700A302B7002302B700A301B7002301D1
:1001C000B700A300B7002300B700828093F5F50FB6
:1001D00093968500D58D93960501D58D61B793963D
:1001E00027009702000096968682E78086FA96801E
:1001F000C1171D8F3E96E374C3F8A5B7B707050076
:100200000947D8CFB7170500938707C0984385667D
:1002100093860640558F98C3B71708009387074009
:1002200023A0070023A2070023A407001307A008A8
:10023000D8C77D57D8CF354798C3D84F9356570165
:100240008D8AE5DE8280B71708009387074023A0D8
:10025000070023A2070023A4070023A607007D5759
:10026000D8CF23A40702B7170500938707C0984388
:10027000F1769386F63F758F98C3B7070500D84F80
:1002800023AE07008280B71708009387074088D7FE
:10029000D84F137707046DDF828037070002B71548
:1002A000080037460F0023200704814781469385C5
:1002B000054013061624C84D137505020DC991CECD
:1002C0002320F70437470F00130707246397E7003D
:1002D000B707000205472383E700B7170800938795
:1002E0000740C8534205418182808546E9B78507AA
:1002F000E39DC7FEFDD2B7470F0093870724232055
:10030000F704F9B74111B707000222C413870700A9
:1003100006C6834667000547138407006390E6021C
:100320001305000F8D37B717080093870740D84F84
:10033000218B09C7D84F13678700D8CF2303040048
:10034000B240224441018280411106C622C426C225
:10035000AA84EF009013E1689388086A01488147F6
:10036000014781460146B70520C726853794980086
:10037000EF000077130414687D1419E40D45B240B2
:10038000224492444101828085452685EF00501128
:1003900005897DF10145E5B7411122C4370400020A
:1003A000930704008C43B70700804AC0BE95B70787
:1003B000000223ACB70206C626C293974501130478
:1003C00004003709000289E713058900EF00701A5D
:1003D0000C40B70400029386440413060010130572
:1003E0008900EF0050141C40370700028356470372
:1003F000938707101CC013060010B68763F4C6006D
:1004000093070010138444041305F400938707F046
:100410001306100F814513040410231AF7021D3B25
:10042000A285138544043D46EF00F0182320040004
:1004300023220400232404002316040023070400BD
:10044000B240224492440249410182805D71130608
:1004500080028145280886C6F539BD47230CF10086
:100460008947230EF1003ED2E177938707082C08D5
:100470000A85231AF1021923B640616182805D71F9
:10048000A2C4370400021305840086C6A6C2652BE9
:1004900013058400E525894513058400EF0050000D
:1004A0009377250085E3AA84854513058400EF0032
:1004B000207F13E62400AA851376F60F1305840027
:1004C000EF007001E1689388086A0148814701479D
:1004D00081460146B7052038130584001125E168DF
:1004E00038009388086A1308000285468147014650
:1004F000B70599EB1305840023040100D523B71534
:10050000000151469385C5EF6800EF00D00A9304BF
:1005100084009C406C0051463ED085473ED2681016
:10052000C1673ED4EF003009B70607009C42370789
:10053000F1FF7D17F98F08109CC2812BB64026442D
:10054000964461618280411106C6F5390D3FB707B7
:10055000008073905730B70000808290B240410114
:100560008280411106C622C426C24AC08347350094
:1005700005476383E70811472A846389E7008DCF25
:10058000B24022449244024941018280B7070002EE
:1005900083D7470391C30935834744000347540079
:1005A000E2074207BA9737070002232EF702370700
:1005B00000022320F700E9B73709000283544903FA
:1005C0000346050093054500370500021305450461
:1005D0002695EF00407E83470400BE94C204C1808C
:1005E000231A99029307F00FE3FC97F82244B240D4
:1005F0009244024941014DB33D457131B7070002B4
:1006000083D7470391C3493B2244B24092440249F5
:10061000410115BF3707000293070700B705000225
:1006200003DE470083A705043716080037450F008F
:1006300037480F00B708000201438146130707003F
:10064000130606401305152413080824938848153B
:1006500063EEC6016304030023A0F504834767002B
:10066000A9E73705000213054515E5BD81470323BA
:10067000C60113730302631F03008507E399A7FEF6
:10068000B7470F009387072423A0F504854723036A
:10069000F7008280E38607FF832E46023383D8006B
:1006A00085062300D301054365B78280011122CC62
:1006B0003704000226CA4AC84EC652C406CE1304E6
:1006C0000400930400061309E00FB7090002130A9F
:1006D0000003E136834764001375F50FA303A400FC
:1006E00099C30D31FDB7630F950063042503E31231
:1006F00045FF3D45493E553605052312A4003D45BD
:100700005936C1BF3D454136313783476400F1FB5F
:10071000FDB7138589000D397DD11305000FCDB7C5
:10072000011106CE22CC1D333704000213058400CC
:10073000192E130584009921E1689388086A0148FD
:100740008147780085460146B705D9EB130584003B
:10075000230601007126E168814701478146014671
:10076000B70538FF9388086A0148130584008D2E69
:10077000713437070002B715080037460F002320F1
:100780000704814781469385054013061624C84D0A
:100790001375050211CD85CA2320F70437470F00D2
:1007A000130707246391E702793B01A08546C5B78B
:1007B0008507E39DC7FE81CAB7470F0093870724CB
:1007C0002320F704D5B7DD350547AA876305E50281
:1007D00009476300E506054591EBB7060600DC4ACC
:1007E0007D771307F73FF98FDCCA014582807D17BB
:1007F00019EB0D4582809306004037A707001307C9
:100800000712B7050500905D7D8E75D2370606008C
:100810005C4A7D771307F73FF98FD58F41115CCA8A
:1008200002C613073006B2476359F700014541017C
:100830008280856693860680C9B7B24785073EC623
:10084000DDB791476307F50263EAA7008547630AAE
:10085000F50489476309F50405458280A147E31D36
:10086000F5FE0947094501A8FD1781EFC8D20D45DE
:10087000828005470D45B7A7070093870712B70683
:100880000500905E798E6DD28A05C98D4111CCD25A
:1008900002C613073006B247635AF700014541010B
:1008A00082801147C9BF21470145F1B7B24785078B
:1008B0003EC6D5B70547AA876305E5020947630227
:1008C000E506054591EBB70606009C4A7D771307C0
:1008D000F73FF98F9CCA014582807D1719EB0D45C2
:1008E00082809306004037A7070013070712B70559
:1008F0000500905D7D8E75D2370706001C4B7D7616
:100900001306F63FF18FD58F1CCB85471CCF4111C5
:1009100002C613073006B2476359F700014541018B
:1009200082808566938606807DBFB24785073EC676
:10093000DDB711C98547630DF50205458280FD17B6
:1009400091EB0D4582800946B7A7070093870712F0
:10095000B7060500985E718F7DD34111C8D602C6D7
:1009600013073006B2476357F70001454101828003
:100970000546D9BFB24785073EC6EDB7011126CA65
:10098000B7040600DC4806CE22CC4AC84EC652C484
:1009900056C2F19BDCC89C482A89C845F19B9CC87B
:1009A00083C7C5012E848A07DCC883C7D5018A079F
:1009B0009CC8193D0C44AA8A03454400593518487F
:1009C000B70705002A8A98C358480850D8C3184C5E
:1009D00098C7CD35AA894850A93F834704002A8784
:1009E00093F6170089E6D44893E62600D4C893F618
:1009F000270099E637060600544A93E6160054CAC3
:100A000093F6470099E637060600144A93E6260057
:100A100014CAA18B99E7B70606009C4A93E7170012
:100A20009CCAF24062442320590123224901232415
:100A300039012326E900D244B249224A924A4A8522
:100A4000424905618280011106CE22CC02C402C651
:100A50002147B707050037550800D8C705448D471B
:100A60008A85130505803EC022C2292A3755080011
:100A70009307C0038A851305058022C222C43EC0A5
:100A80001122F240624405618280411122C406C6EF
:100A90002A84553F18405C4F93E707015CCF1C4404
:100AA0001CCB5C4085CB1C43B7061000D58F1CC304
:100AB000144C5C48B240D606CE07D58F834604015D
:100AC000C206D58F8346C4012244E206D58F1CCFCF
:100AD000410182801C43B706F0FFFD16F58FC1BFB0
:100AE000032305002A8E0325C30113650502232E67
:100AF000A3002324C3001396260149824D8E23268A
:100B000003012322C300139605016354060299C210
:100B10000545B1CB01476346D700639C08020D45EC
:100B200082803386E700034606000507230AC300D8
:100B3000DDB799C2054505CB8147E3D0D7FE032633
:100B40000E00034546013306F70085072300A60083
:100B5000EDB783270E00FD18DC4F93F70702D5DFB2
:100B600011656D8D11E18280B707070083C74701CA
:100B700013F585001D8D3335A00082801C4141474F
:100B8000D8CF8280B7470800938707402A8863043C
:100B9000F508B7570800938707806304F50A3747BD
:100BA0000800630DE50A05458280331E1F01337678
:100BB000DE0129C683A345008843139318003396AA
:100BC0006F001346F6FF13F43300718D3314640085
:100BD000418D88C3638B5302638C0302084303AEC9
:100BE000C500718D331E6E003365C50108C3884290
:100BF000698E884533156500498E90C2850833D5C6
:100C00001E0145F53244410182802326C801F9B70F
:100C10002324C801E1B7B716050037170500B71739
:100C20000500938646C1130707C19387C7C083AEEB
:100C300005008148054F8D4F914233D51E0105EDCA
:100C40008280B716050037170500B7170500938691
:100C500006C21307C7C1938787C1D1BFB716050066
:100C600037170500B7170500938686C0130747C0DE
:100C7000938707C06DBF331E1F013376DE0119E273
:100C8000850865BF411122C635B7E1689388086AB7
:100C900001488147014781460146B705200689B5CD
:100CA000011106CEA307010089476393F502B7053A
:100CB0002035E1681307F1009388086A01488147ED
:100CC00085460146313DF2400345F10005618280D1
:100CD000B7052005F9BF011106CE22CC26CA23068E
:100CE000B100AA84A306C1004D37E1689388086A61
:100CF00001487C00014789460146B78520012685C9
:100D00000964F93B130414717D1419E40D45F24094
:100D10006244D24405618280854526855137058924
:100D200065F50145EDB7011106CE22CC26CA2E8409
:100D30004AC8AA84328936C6893FB247E16822860A
:100D40009388086A01480147CA86B78580022685CC
:100D5000616479331304146A7D1411C485452685B2
:100D60008137058975F9F2406244D24442490561F0
:100D70008280011106CE22CC26CA2EC6AA84313723
:100D80003246E1689388086A0148814701478146F5
:100D9000B705802026856164A1331304146A7D148D
:100DA00011C485452685ED3D058975F9F2406244FB
:100DB000D24405618280B3C7A5008D8BB308C500FE
:100DC000B1E78D4763F4C704937735002A87B9EB01
:100DD00013F6C8FFB306E6409307000263C8D706C0
:100DE000AE86BA876371C70203A806009107910611
:100DF00023AE07FFE3EAC7FE9307F6FF998FF19B47
:100E000091073E97BE956366170182802A87637EAD
:100E1000150383C7050005078505A30FF7FEE39AB1
:100E2000E8FE828083C60500050793773700A30F8D
:100E3000D7FE8505D1DF83C6050005079377370008
:100E4000A30FD7FE8505F9FF61B78280411122C645
:100E50001304000283A3050083A2450083AF85002D
:100E600003AFC50083AE050103AE450103A38501B1
:100E700003A8C501945113074702B307E640232E88
:100E800077FC232057FE2322F7FF2324E7FF2326A6
:100E9000D7FF2328C7FF232A67FE232C07FF232E13
:100EA000D7FE93854502E347F4FAAE86BA876371AD
:100EB000C70203A806009107910623AE07FFE3EAE5
:100EC000C7FE9307F6FF998FF19B91073E97BE955A
:100ED0006365170132444101828083C7050005071D
:100EE0008505A30FF7FEE387E8FE83C70500050726
:100EF0008505A30FF7FEE392E8FEE9BF200000009E
:100F0000010000000300000006000000EB000000EC
:100F10000000008000010000000007000000000049
:100F200000000000000000000000000000000000C1
:100F300000000000000000000000000000000000B1
:0400000501000000F6
:00000001FF
-5
View File
@@ -35,11 +35,6 @@
#include "wiring.h" #include "wiring.h"
// define из avr-gcc (некоторые библиотеки ардуины им пользуются)
#define _BV(bit) (1 << (bit))
// void ErrorMsgHandler(const char * msg);
/* sketch */ /* sketch */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
+67 -29
View File
@@ -6,8 +6,13 @@
#include <uart_lib.h> #include <uart_lib.h>
#include "mik32_hal_irq.h" #include "mik32_hal_irq.h"
// объект класса HardwareSerial для использования в arduino ide
HardwareSerial Serial; // HardwareSerial class objects for use in Arduino IDE
HardwareSerial Serial(0);
#if SERIAL_PORT_QTY > 1
HardwareSerial Serial1(1);
#endif
void serialEvent() __attribute__((weak)); void serialEvent() __attribute__((weak));
bool Serial0_available() __attribute__((weak)); bool Serial0_available() __attribute__((weak));
@@ -55,35 +60,46 @@ void HardwareSerial::begin(unsigned long baud, uint8_t config)
reg2config |= UART_CONTROL2_STOP_1_M; reg2config |= UART_CONTROL2_STOP_1_M;
// turn on the receiver and transmitter, apply the parsed config // turn on the receiver and transmitter, apply the parsed config
UART_Init(UART_0, brr, reg1config, reg2config, reg3config); if (uartNum == 0)
// Enable level-based interrupts for the EPIC_UART_0 line, we have only receive interrupt enabled {
HAL_EPIC_MaskLevelSet(HAL_EPIC_UART_0_MASK); UART_Init(UART_0, brr, reg1config, reg2config, reg3config);
// Enable level-based interrupts for the EPIC_UART_0 line, we have only receive interrupt enabled
isInited = true; HAL_EPIC_MaskLevelSet(HAL_EPIC_UART_0_MASK);
isInited = true;
}
else if (uartNum == 1)
{
UART_Init(UART_1, brr, reg1config, reg2config, reg3config);
// Enable level-based interrupts for the EPIC_UART_1 line, we have only receive interrupt enabled
HAL_EPIC_MaskLevelSet(HAL_EPIC_UART_1_MASK);
isInited = true;
}
} }
void HardwareSerial::end() void HardwareSerial::end()
{ {
if (isInited) if (isInited)
{ {
// wait for the data to be sent if necessary // deinit uart and disable uart interrupt
flush(); if (uartNum == 0)
{
// wait for the data to be sent if necessary
UART_WaitDataTranferCompleteFlag(UART_0);
UART_Deinit(UART_0);
HAL_EPIC_MaskLevelClear(HAL_EPIC_UART_0_MASK);
isInited = false;
}
else if (uartNum == 1)
{
// wait for the data to be sent if necessary
UART_WaitDataTranferCompleteFlag(UART_1);
UART_Deinit(UART_1);
HAL_EPIC_MaskLevelClear(HAL_EPIC_UART_1_MASK);
isInited = false;
}
// disable clock
__HAL_PCC_UART_0_CLK_DISABLE();
HAL_EPIC_MaskLevelClear(HAL_EPIC_UART_0_MASK);
// reconfigure pins to z state
GPIO_InitTypeDef GPIO_InitStruct;
memset(&GPIO_InitStruct, 0, sizeof(GPIO_InitStruct));
GPIO_InitStruct.Pin = (HAL_PinsTypeDef)(GPIO_PIN_5 | GPIO_PIN_6);
GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT;
GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE;
HAL_GPIO_Init(GPIO_0, &GPIO_InitStruct);
// reset buffer indices // reset buffer indices
_rx_buffer_head = _rx_buffer_tail = 0; _rx_buffer_head = _rx_buffer_tail = 0;
isInited = false;
} }
} }
@@ -101,14 +117,19 @@ int HardwareSerial::availableForWrite(void)
void HardwareSerial::rx_complete_irq(void) void HardwareSerial::rx_complete_irq(void)
{ {
// which UART to use
UART_TypeDef* uart = UART_0;
if (uartNum == 1)
uart = UART_1;
// find next index in buffer with upper limit // find next index in buffer with upper limit
uint8_t i = (uint8_t)(_rx_buffer_head + 1)%SERIAL_RX_BUFFER_SIZE; uint8_t i = (uint8_t)(_rx_buffer_head + 1)%SERIAL_RX_BUFFER_SIZE;
unsigned char c; unsigned char c;
// while there is something to receive, put the data into the buffer // while there is something to receive, put the data into the buffer
// and edit the buffer index // and edit the buffer index
while (!UART_IsRxFifoEmpty(UART_0)) while (!UART_IsRxFifoEmpty(uart))
{ {
c = UART_ReadByte(UART_0); c = UART_ReadByte(uart);
if (i != _rx_buffer_tail) if (i != _rx_buffer_tail)
{ {
// write if there is space in the buffer // write if there is space in the buffer
@@ -119,9 +140,16 @@ void HardwareSerial::rx_complete_irq(void)
} }
// wrapper for use in С-files // wrapper for use in С-files
extern "C" void serial_handler_wrapper(void) extern "C" void serial_handler_wrapper(uint8_t uartNumInt)
{ {
if (uartNumInt == 0)
{
Serial.rx_complete_irq(); Serial.rx_complete_irq();
}
else if ((uartNumInt == 1) && (SERIAL_PORT_QTY > 1))
{
Serial1.rx_complete_irq();
}
} }
int HardwareSerial::peek(void) int HardwareSerial::peek(void)
@@ -151,8 +179,16 @@ size_t HardwareSerial::write(uint8_t c)
{ {
if (isInited) if (isInited)
{ {
UART_WriteByte(UART_0, c); if (uartNum == 0)
UART_WaitTransmission(UART_0); {
UART_WriteByte(UART_0, c);
UART_WaitTransmission(UART_0);
}
else if (uartNum == 1)
{
UART_WriteByte(UART_1, c);
UART_WaitTransmission(UART_1);
}
return 1; return 1;
} }
else else
@@ -181,6 +217,8 @@ size_t HardwareSerial::write(const uint8_t *buffer, size_t size)
void HardwareSerial::flush() void HardwareSerial::flush()
{ {
// wait for the data transfer complete // wait for the data transfer complete
while((UART_0->FLAGS & UART_FLAGS_TC_M) == 0) if (uartNum == 0)
; UART_WaitDataTranferCompleteFlag(UART_0);
else if (uartNum == 1)
UART_WaitDataTranferCompleteFlag(UART_1);
} }
+11 -1
View File
@@ -27,6 +27,7 @@
#include <inttypes.h> #include <inttypes.h>
#include "stdint.h" #include "stdint.h"
#include "Stream.h" #include "Stream.h"
#include "pins_arduino.h"
// Define constants and variables for buffering incoming serial data. We're // Define constants and variables for buffering incoming serial data. We're
// using a ring buffer (I think), in which head is the index of the location // using a ring buffer (I think), in which head is the index of the location
@@ -73,9 +74,14 @@ class HardwareSerial : public Stream
private: private:
bool isInited = false; bool isInited = false;
uint8_t uartNum;
public: public:
inline HardwareSerial(){}; inline HardwareSerial(uint8_t num)
{
// Set the UART to be used
uartNum = (num < SERIAL_PORT_QTY) ? num : 0; // UART0 by default
}
void begin(unsigned long baud) { begin(baud, SERIAL_8N1); } void begin(unsigned long baud) { begin(baud, SERIAL_8N1); }
void begin(unsigned long, uint8_t); void begin(unsigned long, uint8_t);
@@ -98,6 +104,10 @@ class HardwareSerial : public Stream
}; };
extern HardwareSerial Serial; extern HardwareSerial Serial;
#if SERIAL_PORT_QTY > 1
extern HardwareSerial Serial1;
#endif
extern void serialEventRun(void) __attribute__((weak)); extern void serialEventRun(void) __attribute__((weak));
#endif #endif
-1
View File
@@ -53,7 +53,6 @@ size_t Print::print(const __FlashStringHelper *ifsh)
else break; else break;
} }
return n; return n;
// return print(reinterpret_cast<const char *>(ifsh));
} }
size_t Print::print(const String &s) size_t Print::print(const String &s)
@@ -425,6 +425,7 @@ HAL_StatusTypeDef HAL_SPI_Exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitByte
goto error; goto error;
} }
} }
return error_code;
error: error:
__HAL_SPI_DISABLE(hspi); __HAL_SPI_DISABLE(hspi);
@@ -544,6 +545,7 @@ HAL_StatusTypeDef HAL_SPI_ExchangeThreshold(SPI_HandleTypeDef *hspi, uint8_t Tra
tx_counter = 0; tx_counter = 0;
} }
} }
return error_code;
error: error:
__HAL_SPI_DISABLE(hspi); __HAL_SPI_DISABLE(hspi);
@@ -64,6 +64,21 @@ bool UART_Init(UART_TypeDef* uart,
return true; return true;
} }
void UART_Deinit(UART_TypeDef* uart)
{
if (uart == UART_0)
{
__HAL_PCC_UART_0_CLK_DISABLE();
// reconfigure pins to z state
HAL_GPIO_PinConfig(GPIO_0, GPIO_PIN_5 | GPIO_PIN_6, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA);
}
else if (uart == UART_1)
{
__HAL_PCC_UART_1_CLK_DISABLE();
// reconfigure pins to z state
HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_8 | GPIO_PIN_9, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA);
}
}
bool UART_IsTransmissionFinished(UART_TypeDef* uart) bool UART_IsTransmissionFinished(UART_TypeDef* uart)
{ {
@@ -78,6 +93,14 @@ bool UART_IsTransmissionFinished(UART_TypeDef* uart)
} }
} }
void UART_WaitDataTranferCompleteFlag(UART_TypeDef* uart)
{
// с этим флагом есть какая-то доп задержка в стоп-битах длиной почти с бит,
// но можно отслеживать полное завершение отправки посылки
while((uart->FLAGS & UART_FLAGS_TC_M) == 0)
;
}
void UART_WaitTransmission(UART_TypeDef* uart) void UART_WaitTransmission(UART_TypeDef* uart)
{ {
while (!UART_IsTransmissionFinished(uart)) ; while (!UART_IsTransmissionFinished(uart)) ;
@@ -38,6 +38,16 @@ bool UART_Init(UART_TypeDef* uart, uint32_t divider,
uint32_t control1, uint32_t control2, uint32_t control3 uint32_t control1, uint32_t control2, uint32_t control3
); );
/** Деинициализирует контроллер USART
Функция отключает тактирование модуля и перенастраивает
используемые для модуля выводы портов
\param uart указатель для доступа к UART
*/
void UART_Deinit(UART_TypeDef* uart);
/** Определяет, активен ли передатчик модуля /** Определяет, активен ли передатчик модуля
@@ -54,6 +64,11 @@ bool UART_IsTransmissionFinished(UART_TypeDef* uart);
*/ */
void UART_WaitTransmission(UART_TypeDef* uart); void UART_WaitTransmission(UART_TypeDef* uart);
/** Ожидает, пока модуль полностью завершит передачу
\param uart указатель для доступа к UART
*/
void UART_WaitDataTranferCompleteFlag(UART_TypeDef* uart);
/** Ожидает, пока модуль примет данные /** Ожидает, пока модуль примет данные
+7 -3
View File
@@ -1,7 +1,7 @@
#include "mik32_hal_irq.h" #include "mik32_hal_irq.h"
// isr functions // isr functions
extern void serial_handler_wrapper(void); extern void serial_handler_wrapper(uint8_t uartNumInt);
extern void gpio_interrupts_handler(void); extern void gpio_interrupts_handler(void);
extern void tone_interrupt_handler(void); extern void tone_interrupt_handler(void);
void __attribute__((weak)) wire_handler_wrapper(void) void __attribute__((weak)) wire_handler_wrapper(void)
@@ -16,9 +16,13 @@ void trap_handler(void)
if (EPIC_CHECK_TIMER16_1()) if (EPIC_CHECK_TIMER16_1())
tone_interrupt_handler(); tone_interrupt_handler();
// uart interrupt // uart0 interrupt
if (EPIC_CHECK_UART_0()) if (EPIC_CHECK_UART_0())
serial_handler_wrapper(); serial_handler_wrapper(0);
// uart1 interrupt
if (EPIC_CHECK_UART_1())
serial_handler_wrapper(1);
// gpio interrupt // gpio interrupt
if (EPIC_CHECK_GPIO_IRQ()) if (EPIC_CHECK_GPIO_IRQ())
+3 -1
View File
@@ -21,6 +21,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include "wiring_private.h"
#define HIGH 0x1 #define HIGH 0x1
#define LOW 0x0 #define LOW 0x0
@@ -80,7 +81,8 @@ enum BitOrder
#define sq(x) ((x)*(x)) #define sq(x) ((x)*(x))
// Bits and Bytes // Bits and Bytes
#define bit(b) (1UL << (b)) #define _BV(bit) (1 << (bit)) // from avr-gcc (some arduino libs uses it)
#define bit(b) (1UL << (b))
#define lowByte(w) ((uint8_t) ((w) & 0xff)) #define lowByte(w) ((uint8_t) ((w) & 0xff))
#define highByte(w) ((uint8_t) ((w) >> 8)) #define highByte(w) ((uint8_t) ((w) >> 8))
+2
View File
@@ -10,6 +10,8 @@
extern "C"{ extern "C"{
#endif #endif
// available interrupts number
#define EXTERNAL_NUM_INTERRUPTS 7
typedef void (*voidFuncPtr)(void); typedef void (*voidFuncPtr)(void);
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

+4 -63
View File
@@ -1,4 +1,5 @@
#include "SPI.h" #include "SPI.h"
#include "mik32_hal_spi.h"
SPI_HandleTypeDef hspi; SPI_HandleTypeDef hspi;
bool newConfig = false; bool newConfig = false;
@@ -204,7 +205,7 @@ uint8_t SPIClass::transfer(uint8_t data)
data = reverse_bits(data); data = reverse_bits(data);
// send and recieve data // send and recieve data
HAL_StatusTypeDef SPI_Status = exchange(&hspi, &data, &rxByte, 1, SPI_TIMEOUT_DEFAULT*2); HAL_StatusTypeDef SPI_Status = HAL_SPI_Exchange(&hspi, &data, &rxByte, 1, SPI_TIMEOUT_DEFAULT*2);
if (SPI_Status != HAL_OK) if (SPI_Status != HAL_OK)
HAL_SPI_ClearError(&hspi); HAL_SPI_ClearError(&hspi);
@@ -236,7 +237,7 @@ uint16_t SPIClass::transfer16(uint16_t data)
} }
// send and recieve data // send and recieve data
HAL_StatusTypeDef SPI_Status = exchange(&hspi, buf, buf, 2, SPI_TIMEOUT_DEFAULT*2); HAL_StatusTypeDef SPI_Status = HAL_SPI_Exchange(&hspi, buf, buf, 2, SPI_TIMEOUT_DEFAULT*2);
if (SPI_Status != HAL_OK) if (SPI_Status != HAL_OK)
HAL_SPI_ClearError(&hspi); HAL_SPI_ClearError(&hspi);
@@ -267,7 +268,7 @@ void SPIClass::transfer(void *buf, size_t count)
} }
// send and recieve data using the same buffer // send and recieve data using the same buffer
HAL_StatusTypeDef SPI_Status = exchange(&hspi, (uint8_t*)buf, (uint8_t*)buf, count, SPI_TIMEOUT_DEFAULT*2); HAL_StatusTypeDef SPI_Status = HAL_SPI_Exchange(&hspi, (uint8_t*)buf, (uint8_t*)buf, count, SPI_TIMEOUT_DEFAULT*2);
if (SPI_Status != HAL_OK) if (SPI_Status != HAL_OK)
HAL_SPI_ClearError(&hspi); HAL_SPI_ClearError(&hspi);
@@ -329,66 +330,6 @@ void SPIClass::setClockDivider(uint8_t clockDiv)
} }
} }
HAL_StatusTypeDef SPIClass::exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t DataSize, uint32_t Timeout)
{
uint32_t txallowed = 1;
HAL_StatusTypeDef error_code = HAL_OK;
uint32_t timeout_counter = 0;
hspi->ErrorCode = HAL_SPI_ERROR_NONE;
hspi->pRxBuffPtr = (uint8_t *)ReceiveBytes;
hspi->RxCount = DataSize;
hspi->pTxBuffPtr = (uint8_t *)TransmitBytes;
hspi->TxCount = DataSize;
hspi->Instance->TX_THR = 1;
/* Включить SPI если выключено */
if (!(hspi->Instance->ENABLE & SPI_ENABLE_M))
{
__HAL_SPI_ENABLE(hspi);
}
while ((hspi->TxCount > 0) || (hspi->RxCount > 0))
{
/* Проверка флага TX_FIFO_NOT_FULL */
if ((hspi->Instance->INT_STATUS & SPI_INT_STATUS_TX_FIFO_NOT_FULL_M) && (hspi->TxCount > 0) && (txallowed == 1))
{
hspi->Instance->TXDATA = *(hspi->pTxBuffPtr);
hspi->pTxBuffPtr++;
hspi->TxCount--;
/* Следующие данные - прием (Rx). Tx не разрешен */
txallowed = 0;
}
/* Ожидание когда установится флаг RX_FIFO_NOT_EMPTY */
if ((hspi->Instance->INT_STATUS & SPI_INT_STATUS_RX_FIFO_NOT_EMPTY_M) && (hspi->RxCount > 0))
{
*(hspi->pRxBuffPtr) = hspi->Instance->RXDATA;
hspi->pRxBuffPtr++;
hspi->RxCount--;
/* Следующие данные - передача (Tx). Tx разрешается */
txallowed = 1;
}
if (((timeout_counter++) >= Timeout) || (Timeout == 0U))
{
error_code = HAL_TIMEOUT;
goto error;
}
}
return error_code;
error:
__HAL_SPI_DISABLE(hspi);
hspi->Instance->ENABLE |= SPI_ENABLE_CLEAR_TX_FIFO_M | SPI_ENABLE_CLEAR_RX_FIFO_M; /* Очистка буферов RX и TX */
volatile uint32_t unused = hspi->Instance->INT_STATUS; /* Очистка флагов ошибок чтением */
(void) unused;
return error_code;
}
static uint8_t reverse_bits(uint8_t byte) static uint8_t reverse_bits(uint8_t byte)
{ {
byte = (byte & 0xF0) >> 4 | (byte & 0x0F) << 4; byte = (byte & 0xF0) >> 4 | (byte & 0x0F) << 4;
-4
View File
@@ -15,7 +15,6 @@
#define _SPI_H_INCLUDED #define _SPI_H_INCLUDED
#include <Arduino.h> #include <Arduino.h>
#include "mik32_hal_spi.h"
// SPI_HAS_TRANSACTION means SPI has beginTransaction(), endTransaction(), // SPI_HAS_TRANSACTION means SPI has beginTransaction(), endTransaction(),
// usingInterrupt(), and SPISetting(clock, bitOrder, dataMode) // usingInterrupt(), and SPISetting(clock, bitOrder, dataMode)
@@ -121,9 +120,6 @@ public:
// This function is deprecated. New applications should use // This function is deprecated. New applications should use
// beginTransaction() to configure SPI settings. // beginTransaction() to configure SPI settings.
void setClockDivider(uint8_t clockDiv); void setClockDivider(uint8_t clockDiv);
// A temporary function until this error is fixed in the HAL library
HAL_StatusTypeDef exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t DataSize, uint32_t Timeout);
}; };
extern SPIClass SPI; extern SPIClass SPI;
+8 -4
View File
@@ -23,13 +23,14 @@
#ifndef Pins_Arduino_h #ifndef Pins_Arduino_h
#define Pins_Arduino_h #define Pins_Arduino_h
#include "wiring_constants.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include "mik32_hal_gpio.h" #include "mik32_hal_gpio.h"
#include "mik32_hal_timer32.h" #include "mik32_hal_timer32.h"
#include "wiring_constants.h"
extern bool spiNssPinIsBlocked; extern bool spiNssPinIsBlocked;
@@ -63,9 +64,13 @@ HAL_PinsTypeDef digitalPinToBitMask(uint32_t digPinNumber);
// total number of pins available for initialization // total number of pins available for initialization
uint16_t pinCommonQty(void); uint16_t pinCommonQty(void);
// the function returns a reference to the OUTPUT address of the GPIO register // the function returns a reference to the OUTPUT address of the GPIO register
uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x);
// the function returns a reference to the STATE address of the GPIO register // the function returns a reference to the STATE address of the GPIO register
uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x);
// UART
// available uarts quantity
#define SERIAL_PORT_QTY 2
// ADC // ADC
// determines the ADC channel number by the board pin number // determines the ADC channel number by the board pin number
@@ -110,7 +115,6 @@ static const uint8_t SCL = PIN_WIRE_SCL;
#define WIRE_FREQ_1000K 1000000 #define WIRE_FREQ_1000K 1000000
// interrupts // interrupts
#define EXTERNAL_NUM_INTERRUPTS 7
// determines the board pin number by interrupt number // determines the board pin number by interrupt number
uint32_t interruptToDigitalPin(uint8_t interruptNum); uint32_t interruptToDigitalPin(uint8_t interruptNum);
// determines interrupt number by the board pin number // determines interrupt number by the board pin number
+4 -4
View File
@@ -95,24 +95,24 @@ uint16_t pinCommonQty(void)
} }
// the function returns a reference to the OUTPUT address of the GPIO register // the function returns a reference to the OUTPUT address of the GPIO register
uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x) volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x)
{ {
return &GPIO_x->OUTPUT_; return &GPIO_x->OUTPUT_;
} }
// the function returns a reference to the STATE address of the GPIO register // the function returns a reference to the STATE address of the GPIO register
uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x) volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x)
{ {
return &GPIO_x->STATE; return &GPIO_x->STATE;
} }
// ---------------------- АЦП ---------------------- // // ---------------------- ADC ---------------------- //
// determines the ADC channel number by the board pin number // determines the ADC channel number by the board pin number
uint32_t analogInputToChannelNumber(uint32_t PinNumber) uint32_t analogInputToChannelNumber(uint32_t PinNumber)
{ {
uint32_t adcChannel = 0; uint32_t adcChannel = 0;
// if passed a value from 0 - 5, instead of A0 - A5 // if get a value 0...5 instead of A0...A5
if (PinNumber < 4) PinNumber += 14; if (PinNumber < 4) PinNumber += 14;
else if (PinNumber < 6) PinNumber += 16; else if (PinNumber < 6) PinNumber += 16;