atmel/samd: Add basic PWM support which only allows for changing the duty.

This commit is contained in:
Scott Shawcroft 2016-08-30 13:10:52 -07:00
parent b883a15d82
commit ccb309bd5c
21 changed files with 14036 additions and 40 deletions

View File

@ -58,6 +58,7 @@ INC += $(addprefix -Iasf/sam0/,\
drivers/system/power/power_sam_d_r \
drivers/system/reset/reset_sam_d_r \
drivers/sercom/ \
drivers/tc/ \
drivers/usb/ \
utils \
utils/cmsis/samd21/include \
@ -107,6 +108,8 @@ SRC_ASF = $(addprefix asf/sam0/,\
drivers/system/interrupt/system_interrupt.c \
drivers/system/pinmux/pinmux.c \
drivers/system/system.c \
drivers/tc/tc_sam_d_r/tc.c \
drivers/tcc/tcc.c \
drivers/usb/stack_interface/usb_device_udd.c \
drivers/usb/stack_interface/usb_dual.c \
drivers/usb/usb_sam_d_r/usb.c \
@ -118,6 +121,7 @@ SRC_C = \
modmachine_adc.c \
modmachine_dac.c \
modmachine_pin.c \
modmachine_pwm.c \
modutime.c \
mphalport.c \
pin_named_pins.c \

View File

@ -0,0 +1,434 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.2" baseProfile="tiny" width="180mm" height="210mm" viewBox="0 0 18000 21000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Arial" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="450"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="x" horiz-adv-x="954" d="M 15,0 L 403,552 44,1062 269,1062 432,813 C 463,766 487,726 506,694 535,738 562,777 587,811 L 766,1062 981,1062 614,562 1009,0 788,0 570,330 512,419 233,0 15,0 Z"/>
<glyph unicode="v" horiz-adv-x="954" d="M 430,0 L 26,1062 216,1062 444,426 C 469,357 491,286 512,212 528,268 550,335 579,414 L 815,1062 1000,1062 598,0 430,0 Z"/>
<glyph unicode="u" horiz-adv-x="848" d="M 831,0 L 831,156 C 748,36 636,-24 494,-24 431,-24 373,-12 319,12 264,36 224,66 198,103 171,139 153,183 142,236 135,271 131,327 131,404 L 131,1062 311,1062 311,473 C 311,379 315,316 322,283 333,236 357,199 394,172 431,145 476,131 530,131 584,131 635,145 682,173 729,200 763,238 783,286 802,333 812,402 812,493 L 812,1062 992,1062 992,0 831,0 Z"/>
<glyph unicode="t" horiz-adv-x="504" d="M 528,161 L 554,2 C 503,-9 458,-14 418,-14 353,-14 302,-4 266,17 230,38 205,65 190,99 175,132 168,203 168,311 L 168,922 36,922 36,1062 168,1062 168,1325 347,1433 347,1062 528,1062 528,922 347,922 347,301 C 347,250 350,217 357,202 363,187 373,176 388,167 402,158 422,154 449,154 469,154 495,156 528,161 Z"/>
<glyph unicode="s" horiz-adv-x="874" d="M 63,317 L 241,345 C 251,274 279,219 325,181 370,143 434,124 516,124 599,124 660,141 700,175 740,208 760,248 760,293 760,334 742,366 707,389 682,405 621,425 523,450 391,483 300,512 249,537 198,561 159,595 133,638 106,681 93,728 93,780 93,827 104,871 126,912 147,952 177,985 214,1012 242,1033 280,1050 329,1065 377,1079 429,1086 484,1086 567,1086 641,1074 704,1050 767,1026 813,994 843,953 873,912 894,857 905,788 L 729,764 C 721,819 698,861 660,892 621,923 567,938 497,938 414,938 355,924 320,897 285,870 267,838 267,801 267,778 274,757 289,738 304,719 327,703 358,690 376,683 429,668 517,644 644,610 733,582 784,561 834,539 873,507 902,466 931,425 945,373 945,312 945,252 928,196 893,143 858,90 807,49 741,20 675,-9 600,-24 517,-24 379,-24 274,5 202,62 129,119 83,204 63,317 Z"/>
<glyph unicode="r" horiz-adv-x="557" d="M 133,0 L 133,1062 295,1062 295,901 C 336,976 375,1026 410,1050 445,1074 483,1086 525,1086 586,1086 647,1067 710,1028 L 648,861 C 604,887 560,900 516,900 477,900 441,888 410,865 379,841 356,808 343,766 323,702 313,632 313,556 L 313,0 133,0 Z"/>
<glyph unicode="p" horiz-adv-x="901" d="M 135,-407 L 135,1062 299,1062 299,924 C 338,978 381,1019 430,1046 479,1073 538,1086 607,1086 698,1086 778,1063 847,1016 916,969 969,904 1004,819 1039,734 1057,640 1057,539 1057,430 1038,333 999,246 960,159 903,92 829,46 754,-1 676,-24 594,-24 534,-24 480,-11 433,14 385,39 346,71 315,110 L 315,-407 135,-407 Z M 298,525 C 298,388 326,287 381,222 436,157 503,124 582,124 662,124 731,158 788,226 845,293 873,398 873,540 873,675 845,777 790,844 734,911 667,945 590,945 513,945 446,909 387,838 328,766 298,662 298,525 Z"/>
<glyph unicode="o" horiz-adv-x="980" d="M 68,531 C 68,728 123,873 232,968 323,1047 435,1086 566,1086 712,1086 831,1038 924,943 1017,847 1063,715 1063,546 1063,409 1043,302 1002,224 961,145 901,84 823,41 744,-2 659,-24 566,-24 417,-24 297,24 206,119 114,214 68,352 68,531 Z M 253,531 C 253,395 283,293 342,226 401,158 476,124 566,124 655,124 730,158 789,226 848,294 878,398 878,537 878,668 848,768 789,836 729,903 655,937 566,937 476,937 401,903 342,836 283,769 253,667 253,531 Z"/>
<glyph unicode="n" horiz-adv-x="848" d="M 135,0 L 135,1062 297,1062 297,911 C 375,1028 488,1086 635,1086 699,1086 758,1075 812,1052 865,1029 905,998 932,961 959,924 977,879 988,828 995,795 998,736 998,653 L 998,0 818,0 818,646 C 818,719 811,774 797,811 783,847 758,876 723,898 687,919 645,930 597,930 520,930 454,906 399,857 343,808 315,716 315,580 L 315,0 135,0 Z"/>
<glyph unicode="m" horiz-adv-x="1457" d="M 135,0 L 135,1062 296,1062 296,913 C 329,965 374,1007 429,1039 484,1070 547,1086 618,1086 697,1086 761,1070 812,1037 862,1004 897,959 918,900 1002,1024 1111,1086 1246,1086 1351,1086 1432,1057 1489,999 1546,940 1574,850 1574,729 L 1574,0 1395,0 1395,669 C 1395,741 1389,793 1378,825 1366,856 1345,882 1314,901 1283,920 1247,930 1206,930 1131,930 1069,905 1020,856 971,806 946,726 946,617 L 946,0 766,0 766,690 C 766,770 751,830 722,870 693,910 645,930 578,930 527,930 481,917 438,890 395,863 363,824 344,773 325,722 315,648 315,551 L 315,0 135,0 Z"/>
<glyph unicode="l" horiz-adv-x="186" d="M 131,0 L 131,1466 311,1466 311,0 131,0 Z"/>
<glyph unicode="i" horiz-adv-x="160" d="M 136,1259 L 136,1466 316,1466 316,1259 136,1259 Z M 136,0 L 136,1062 316,1062 316,0 136,0 Z"/>
<glyph unicode="h" horiz-adv-x="848" d="M 135,0 L 135,1466 315,1466 315,940 C 399,1037 505,1086 633,1086 712,1086 780,1071 838,1040 896,1009 938,966 963,911 988,856 1000,777 1000,673 L 1000,0 820,0 820,673 C 820,763 801,829 762,870 723,911 667,931 596,931 543,931 493,917 446,890 399,862 365,824 345,777 325,730 315,664 315,581 L 315,0 135,0 Z"/>
<glyph unicode="g" horiz-adv-x="927" d="M 102,-88 L 277,-114 C 284,-168 305,-207 338,-232 383,-265 444,-282 521,-282 604,-282 669,-265 714,-232 759,-199 790,-152 806,-92 815,-55 820,22 819,139 740,46 642,0 525,0 379,0 266,53 186,158 106,263 66,390 66,537 66,638 84,732 121,818 158,903 211,969 281,1016 350,1063 432,1086 526,1086 651,1086 755,1035 836,934 L 836,1062 1002,1062 1002,144 C 1002,-21 985,-138 952,-207 918,-276 865,-331 792,-371 719,-411 629,-431 522,-431 395,-431 293,-402 215,-345 137,-288 99,-203 102,-88 Z M 251,550 C 251,411 279,309 334,245 389,181 459,149 542,149 625,149 694,181 750,245 806,308 834,408 834,544 834,674 805,772 748,838 690,904 620,937 539,937 459,937 391,905 335,840 279,775 251,678 251,550 Z"/>
<glyph unicode="f" horiz-adv-x="610" d="M 178,0 L 178,922 19,922 19,1062 178,1062 178,1175 C 178,1246 184,1299 197,1334 214,1381 245,1419 289,1448 332,1477 393,1491 472,1491 523,1491 579,1485 640,1473 L 613,1316 C 576,1323 540,1326 507,1326 452,1326 414,1314 391,1291 368,1268 357,1224 357,1160 L 357,1062 564,1062 564,922 357,922 357,0 178,0 Z"/>
<glyph unicode="e" horiz-adv-x="980" d="M 862,342 L 1048,319 C 1019,210 964,126 885,66 806,6 704,-24 581,-24 426,-24 303,24 212,120 121,215 75,349 75,522 75,701 121,839 213,938 305,1037 424,1086 571,1086 713,1086 829,1038 919,941 1009,844 1054,708 1054,533 1054,522 1054,506 1053,485 L 261,485 C 268,368 301,279 360,217 419,155 493,124 582,124 648,124 704,141 751,176 798,211 835,266 862,342 Z M 271,633 L 864,633 C 856,722 833,789 796,834 739,903 664,938 573,938 490,938 421,910 365,855 308,800 277,726 271,633 Z"/>
<glyph unicode="c" horiz-adv-x="927" d="M 828,389 L 1005,366 C 986,244 936,149 857,80 777,11 679,-24 563,-24 418,-24 301,24 213,119 124,214 80,350 80,527 80,642 99,742 137,828 175,914 233,979 311,1022 388,1065 473,1086 564,1086 679,1086 774,1057 847,999 920,940 967,857 988,750 L 813,723 C 796,794 767,848 725,884 682,920 631,938 571,938 480,938 407,906 350,841 293,776 265,673 265,532 265,389 292,286 347,221 402,156 473,124 561,124 632,124 691,146 738,189 785,232 815,299 828,389 Z"/>
<glyph unicode="a" horiz-adv-x="980" d="M 828,131 C 761,74 697,34 636,11 574,-12 508,-24 437,-24 320,-24 231,5 168,62 105,119 74,191 74,280 74,332 86,380 110,423 133,466 164,500 203,526 241,552 284,572 332,585 367,594 421,603 492,612 637,629 744,650 813,674 814,699 814,714 814,721 814,794 797,846 763,876 717,917 649,937 558,937 473,937 411,922 371,893 330,863 300,810 281,735 L 105,759 C 121,834 147,895 184,942 221,988 274,1024 343,1049 412,1074 493,1086 584,1086 675,1086 748,1075 805,1054 862,1033 903,1006 930,974 957,941 975,900 986,851 992,820 995,765 995,685 L 995,445 C 995,278 999,172 1007,128 1014,83 1029,41 1052,0 L 864,0 C 845,37 833,81 828,131 Z M 813,533 C 748,506 650,484 519,465 445,454 393,442 362,429 331,416 308,396 291,371 274,345 266,316 266,285 266,237 284,197 321,165 357,133 410,117 480,117 549,117 611,132 665,163 719,193 759,234 784,287 803,328 813,388 813,467 L 813,533 Z"/>
<glyph unicode="_" horiz-adv-x="1192" d="M -31,-407 L -31,-277 1162,-277 1162,-407 -31,-407 Z"/>
<glyph unicode="W" horiz-adv-x="1986" d="M 414,0 L 25,1466 224,1466 447,505 C 471,404 492,304 509,205 546,362 568,452 575,476 L 854,1466 1088,1466 1298,724 C 1351,540 1389,367 1412,205 1431,298 1455,404 1485,524 L 1715,1466 1910,1466 1508,0 1321,0 1012,1117 C 986,1210 971,1268 966,1289 951,1222 936,1164 923,1117 L 612,0 414,0 Z"/>
<glyph unicode="T" horiz-adv-x="1166" d="M 531,0 L 531,1293 48,1293 48,1466 1210,1466 1210,1293 725,1293 725,0 531,0 Z"/>
<glyph unicode="P" horiz-adv-x="1113" d="M 158,0 L 158,1466 711,1466 C 808,1466 883,1461 934,1452 1006,1440 1066,1417 1115,1384 1164,1350 1203,1303 1233,1242 1262,1181 1277,1115 1277,1042 1277,917 1237,812 1158,726 1079,639 935,596 728,596 L 352,596 352,0 158,0 Z M 352,769 L 731,769 C 856,769 945,792 998,839 1051,886 1077,951 1077,1036 1077,1097 1062,1150 1031,1194 1000,1237 959,1266 908,1280 875,1289 815,1293 727,1293 L 352,1293 352,769 Z"/>
<glyph unicode="O" horiz-adv-x="1404" d="M 99,714 C 99,957 164,1148 295,1286 426,1423 594,1492 801,1492 936,1492 1058,1460 1167,1395 1276,1330 1359,1240 1416,1125 1473,1009 1501,878 1501,731 1501,582 1471,449 1411,332 1351,215 1266,126 1156,66 1046,5 927,-25 800,-25 662,-25 539,8 430,75 321,142 239,233 183,348 127,463 99,585 99,714 Z M 299,711 C 299,534 347,395 442,294 537,192 656,141 799,141 945,141 1065,192 1160,295 1254,398 1301,543 1301,732 1301,851 1281,956 1241,1045 1200,1134 1141,1203 1064,1252 986,1301 899,1325 802,1325 665,1325 547,1278 448,1184 349,1089 299,932 299,711 Z"/>
<glyph unicode="L" horiz-adv-x="927" d="M 150,0 L 150,1466 344,1466 344,173 1066,173 1066,0 150,0 Z"/>
<glyph unicode="K" horiz-adv-x="1192" d="M 150,0 L 150,1466 344,1466 344,739 1072,1466 1335,1466 720,872 1362,0 1106,0 584,742 344,508 344,0 150,0 Z"/>
<glyph unicode="I" horiz-adv-x="186" d="M 191,0 L 191,1466 385,1466 385,0 191,0 Z"/>
<glyph unicode="G" horiz-adv-x="1350" d="M 844,575 L 844,747 1465,748 1465,204 C 1370,128 1271,71 1170,33 1069,-6 965,-25 858,-25 714,-25 583,6 466,68 348,129 259,218 199,335 139,452 109,582 109,726 109,869 139,1002 199,1126 258,1249 344,1341 456,1401 568,1461 697,1491 843,1491 949,1491 1045,1474 1131,1440 1216,1405 1283,1357 1332,1296 1381,1235 1418,1155 1443,1056 L 1268,1008 C 1246,1083 1219,1141 1186,1184 1153,1227 1107,1261 1046,1287 985,1312 918,1325 844,1325 755,1325 679,1312 614,1285 549,1258 497,1222 458,1178 418,1134 387,1086 365,1033 328,942 309,844 309,738 309,607 332,498 377,410 422,322 487,257 573,214 659,171 750,150 847,150 931,150 1013,166 1093,199 1173,231 1234,265 1275,302 L 1275,575 844,575 Z"/>
<glyph unicode="E" horiz-adv-x="1059" d="M 162,0 L 162,1466 1222,1466 1222,1293 356,1293 356,844 1167,844 1167,672 356,672 356,173 1256,173 1256,0 162,0 Z"/>
<glyph unicode="C" horiz-adv-x="1298" d="M 1204,514 L 1398,465 C 1357,306 1284,184 1179,101 1073,17 944,-25 791,-25 633,-25 505,7 406,72 307,136 231,229 180,351 128,473 102,604 102,744 102,897 131,1030 190,1144 248,1257 331,1344 439,1403 546,1462 665,1491 794,1491 941,1491 1064,1454 1164,1379 1264,1304 1334,1199 1373,1064 L 1182,1019 C 1148,1126 1099,1203 1034,1252 969,1301 888,1325 790,1325 677,1325 583,1298 508,1244 432,1190 379,1118 348,1027 317,936 302,842 302,745 302,620 320,512 357,419 393,326 449,256 526,210 603,164 686,141 775,141 884,141 976,172 1051,235 1126,298 1177,391 1204,514 Z"/>
<glyph unicode="B" horiz-adv-x="1086" d="M 150,0 L 150,1466 700,1466 C 812,1466 902,1451 970,1422 1037,1392 1090,1346 1129,1285 1167,1223 1186,1158 1186,1091 1186,1028 1169,969 1135,914 1101,859 1050,814 981,780 1070,754 1138,710 1186,647 1233,584 1257,510 1257,425 1257,356 1243,293 1214,234 1185,175 1149,129 1106,97 1063,65 1010,41 946,25 881,8 802,0 709,0 L 150,0 Z M 344,850 L 661,850 C 747,850 809,856 846,867 895,882 933,906 958,940 983,974 995,1017 995,1068 995,1117 983,1160 960,1197 937,1234 903,1259 860,1273 817,1286 742,1293 637,1293 L 344,1293 344,850 Z M 344,173 L 709,173 C 772,173 816,175 841,180 886,188 923,201 953,220 983,239 1008,266 1027,302 1046,337 1056,378 1056,425 1056,480 1042,527 1014,568 986,608 947,636 898,653 848,669 776,677 683,677 L 344,677 344,173 Z"/>
<glyph unicode="=" horiz-adv-x="953" d="M 1082,862 L 114,862 114,1030 1082,1030 1082,862 Z M 1082,417 L 114,417 114,585 1082,585 1082,417 Z"/>
<glyph unicode="1" horiz-adv-x="530" d="M 763,0 L 583,0 583,1147 C 540,1106 483,1064 413,1023 342,982 279,951 223,930 L 223,1104 C 324,1151 412,1209 487,1276 562,1343 616,1409 647,1472 L 763,1472 763,0 Z"/>
<glyph unicode="0" horiz-adv-x="954" d="M 85,723 C 85,896 103,1036 139,1142 174,1247 227,1329 298,1386 368,1443 456,1472 563,1472 642,1472 711,1456 770,1425 829,1393 878,1347 917,1288 956,1228 986,1155 1008,1070 1030,984 1041,868 1041,723 1041,551 1023,412 988,307 953,201 900,119 830,62 759,4 670,-25 563,-25 422,-25 311,26 230,127 133,249 85,448 85,723 Z M 270,723 C 270,482 298,322 355,243 411,163 480,123 563,123 646,123 715,163 772,243 828,323 856,483 856,723 856,964 828,1125 772,1204 715,1283 645,1323 561,1323 478,1323 412,1288 363,1218 301,1129 270,964 270,723 Z"/>
<glyph unicode="/" horiz-adv-x="557" d="M 0,-25 L 425,1491 569,1491 145,-25 0,-25 Z"/>
<glyph unicode="." horiz-adv-x="212" d="M 186,0 L 186,205 391,205 391,0 186,0 Z"/>
<glyph unicode=" " horiz-adv-x="556"/>
</font>
</defs>
<g visibility="visible" id="MasterSlide_1_Default">
<desc>Master slide
</desc>
<rect fill="none" stroke="none" x="0" y="0" width="18000" height="21000"/>
</g>
<g visibility="visible" id="Slide_1_page1">
<g>
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" id="Drawing_1_0" stroke-width="50" stroke-linejoin="round" d="M 7506,8480 L 900,8480 900,2000 14111,2000 14111,8480 7506,8480 Z"/>
</g>
<g id="Drawing_2">
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-width="50" stroke-linejoin="round" d="M 4966,7508 L 2134,7508 2134,5483 7797,5483 7797,7508 4966,7508 Z"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="4210" y="6640">C</text>
<text x="4515" y="6640">o</text>
<text x="4752" y="6640">u</text>
<text x="4989" y="6640">n</text>
<text x="5226" y="6640">t</text>
<text x="5345" y="6640">e</text>
<text x="5582" y="6640">r</text>
</g>
</g>
<g id="Drawing_3">
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-width="50" stroke-linejoin="round" d="M 4966,4430 L 2134,4430 2134,3701 7797,3701 7797,4430 4966,4430 Z"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="4070" y="4210">P</text>
<text x="4354" y="4210">r</text>
<text x="4493" y="4210">e</text>
<text x="4730" y="4210">s</text>
<text x="4942" y="4210">c</text>
<text x="5154" y="4210">a</text>
<text x="5391" y="4210">l</text>
<text x="5484" y="4210">e</text>
<text x="5721" y="4210">r</text>
</g>
</g>
<g id="Drawing_4">
<rect fill="none" stroke="none" x="1924" y="2040" width="6083" height="1261"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="2174" y="2546">B</text>
<text x="2458" y="2546">a</text>
<text x="2695" y="2546">s</text>
<text x="2906" y="2546">e</text>
<text x="3143" y="2546"> </text>
<text x="3262" y="2546">C</text>
<text x="3567" y="2546">o</text>
<text x="3804" y="2546">u</text>
<text x="4041" y="2546">n</text>
<text x="4278" y="2546">t</text>
<text x="4397" y="2546">e</text>
<text x="4634" y="2546">r</text>
</g>
</g>
<g id="Drawing_5">
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-width="50" stroke-linejoin="round" d="M 10963,5605 L 9180,5605 9180,3580 12746,3580 12746,5605 10963,5605 Z"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="9714" y="4737">C</text>
<text x="10019" y="4737">o</text>
<text x="10256" y="4737">n</text>
<text x="10493" y="4737">t</text>
<text x="10611" y="4737">r</text>
<text x="10751" y="4737">o</text>
<text x="10988" y="4737">l</text>
<text x="11081" y="4737"> </text>
<text x="11200" y="4737">L</text>
<text x="11437" y="4737">o</text>
<text x="11674" y="4737">g</text>
<text x="11907" y="4737">i</text>
<text x="12000" y="4737">c</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 8247,6495 L 10963,6495 10963,6055"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_6_0" d="M 7797,6495 L 8360,6683 8360,6308 7797,6495 Z"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_6_1" d="M 10963,5605 L 10776,6168 11151,6168 10963,5605 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 4965,4430 L 4965,5033"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_7_0" d="M 4965,5483 L 5153,4921 4778,4921 4965,5483 Z"/>
</g>
<g>
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" id="Drawing_8_0" stroke-width="50" stroke-linejoin="round" d="M 8024,17465 L 1500,17465 1500,9605 14548,9605 14548,17465 8024,17465 Z"/>
</g>
<g id="Drawing_9">
<rect fill="none" stroke="none" x="6100" y="9500" width="4455" height="726"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="6350" y="10006">C</text>
<text x="6655" y="10006">o</text>
<text x="6892" y="10006">m</text>
<text x="7247" y="10006">p</text>
<text x="7485" y="10006">a</text>
<text x="7722" y="10006">r</text>
<text x="7861" y="10006">e</text>
<text x="8098" y="10006"> </text>
<text x="8217" y="10006">C</text>
<text x="8522" y="10006">a</text>
<text x="8759" y="10006">p</text>
<text x="8996" y="10006">t</text>
<text x="9114" y="10006">u</text>
<text x="9351" y="10006">r</text>
<text x="9491" y="10006">e</text>
<text x="9728" y="10006"> </text>
<text x="9847" y="10006">n</text>
</g>
</g>
<g>
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" id="Drawing_10_0" stroke-width="50" stroke-linejoin="round" d="M 7825,18060 L 1300,18060 1300,10200 14349,10200 14349,18060 7825,18060 Z"/>
</g>
<g id="Drawing_11">
<rect fill="none" stroke="none" x="5805" y="10125" width="4453" height="727"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="6055" y="10631">C</text>
<text x="6360" y="10631">o</text>
<text x="6597" y="10631">m</text>
<text x="6952" y="10631">p</text>
<text x="7190" y="10631">a</text>
<text x="7427" y="10631">r</text>
<text x="7566" y="10631">e</text>
<text x="7803" y="10631"> </text>
<text x="7922" y="10631">C</text>
<text x="8227" y="10631">a</text>
<text x="8464" y="10631">p</text>
<text x="8701" y="10631">t</text>
<text x="8819" y="10631">u</text>
<text x="9056" y="10631">r</text>
<text x="9196" y="10631">e</text>
<text x="9433" y="10631"> </text>
<text x="9552" y="10631">.</text>
<text x="9670" y="10631">.</text>
<text x="9789" y="10631">.</text>
</g>
</g>
<g>
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" id="Drawing_12_0" stroke-width="50" stroke-linejoin="round" d="M 7624,18700 L 1100,18700 1100,10841 14148,10841 14148,18700 7624,18700 Z"/>
</g>
<g id="Drawing_13">
<rect fill="none" stroke="none" x="5319" y="10826" width="4453" height="726"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="5569" y="11332">C</text>
<text x="5874" y="11332">o</text>
<text x="6111" y="11332">m</text>
<text x="6466" y="11332">p</text>
<text x="6704" y="11332">a</text>
<text x="6941" y="11332">r</text>
<text x="7080" y="11332">e</text>
<text x="7317" y="11332"> </text>
<text x="7436" y="11332">C</text>
<text x="7741" y="11332">a</text>
<text x="7978" y="11332">p</text>
<text x="8215" y="11332">t</text>
<text x="8333" y="11332">u</text>
<text x="8570" y="11332">r</text>
<text x="8710" y="11332">e</text>
<text x="8947" y="11332"> </text>
<text x="9066" y="11332">1</text>
</g>
</g>
<g>
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" id="Drawing_14_0" stroke-width="50" stroke-linejoin="round" d="M 7433,19323 L 910,19323 910,11462 13956,11462 13956,19323 7433,19323 Z"/>
</g>
<g id="Drawing_15">
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-width="50" stroke-linejoin="round" d="M 10963,14376 L 8840,14376 8840,12350 13086,12350 13086,14376 10963,14376 Z"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="9714" y="13507">C</text>
<text x="10019" y="13507">o</text>
<text x="10256" y="13507">n</text>
<text x="10493" y="13507">t</text>
<text x="10611" y="13507">r</text>
<text x="10751" y="13507">o</text>
<text x="10988" y="13507">l</text>
<text x="11081" y="13507"> </text>
<text x="11200" y="13507">L</text>
<text x="11437" y="13507">o</text>
<text x="11674" y="13507">g</text>
<text x="11907" y="13507">i</text>
<text x="12000" y="13507">c</text>
</g>
</g>
<g id="Drawing_16">
<rect fill="none" stroke="none" x="4946" y="11400" width="4455" height="726"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="5196" y="11906">C</text>
<text x="5501" y="11906">o</text>
<text x="5738" y="11906">m</text>
<text x="6093" y="11906">p</text>
<text x="6331" y="11906">a</text>
<text x="6568" y="11906">r</text>
<text x="6707" y="11906">e</text>
<text x="6944" y="11906"> </text>
<text x="7063" y="11906">C</text>
<text x="7368" y="11906">a</text>
<text x="7605" y="11906">p</text>
<text x="7842" y="11906">t</text>
<text x="7960" y="11906">u</text>
<text x="8197" y="11906">r</text>
<text x="8337" y="11906">e</text>
<text x="8574" y="11906"> </text>
<text x="8693" y="11906">0</text>
</g>
</g>
<g id="Drawing_17">
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-width="50" stroke-linejoin="round" d="M 10963,17375 L 8840,17375 8840,15349 13086,15349 13086,17375 10963,17375 Z"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="9935" y="16269">W</text>
<text x="10337" y="16269">a</text>
<text x="10574" y="16269">v</text>
<text x="10782" y="16269">e</text>
<text x="11019" y="16269">f</text>
<text x="11142" y="16269">o</text>
<text x="11379" y="16269">r</text>
<text x="11518" y="16269">m</text>
<text x="11874" y="16269"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="9911" y="16743">G</text>
<text x="10241" y="16743">e</text>
<text x="10478" y="16743">n</text>
<text x="10715" y="16743">e</text>
<text x="10952" y="16743">r</text>
<text x="11092" y="16743">a</text>
<text x="11329" y="16743">t</text>
<text x="11448" y="16743">i</text>
<text x="11541" y="16743">o</text>
<text x="11778" y="16743">n</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 10963,14376 L 10963,14899"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_18_0" d="M 10963,15349 L 11151,14787 10776,14787 10963,15349 Z"/>
</g>
<g id="Drawing_19">
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-width="50" stroke-linejoin="round" d="M 4966,15735 L 2894,15735 2894,15006 7037,15006 7037,15735 4966,15735 Z"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="4542" y="15515">C</text>
<text x="4847" y="15515">C</text>
<text x="5152" y="15515">0</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 7037,15370 L 7939,15370 7939,16362 8390,16362"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_20_0" d="M 8840,16362 L 8278,16175 8278,16550 8840,16362 Z"/>
</g>
<g id="Drawing_21">
<path fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-width="50" stroke-linejoin="round" d="M 4966,18895 L 2894,18895 2894,18166 7037,18166 7037,18895 4966,18895 Z"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="635" font-style="normal" font-weight="400">
<text x="4779" y="18747">=</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 4965,15735 L 4965,17716"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_22_0" d="M 4965,18166 L 5153,17604 4778,17604 4965,18166 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 7037,18530 L 10963,18530 10963,17825"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_23_0" d="M 10963,17375 L 10776,17938 11151,17938 10963,17375 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 10950,18320 L 10958,19888"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_24_0" d="M 10960,20338 L 11145,19775 10770,19776 10960,20338 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 4965,7508 L 4965,14556"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_25_0" d="M 4965,15006 L 5153,14444 4778,14444 4965,15006 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 9180,4592 L 8489,4592 8489,4065 8247,4065"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_26_0" d="M 7797,4065 L 8360,4253 8360,3878 7797,4065 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 17000,2700 L 14812,2700"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_27_0" d="M 14200,2700 L 14965,2955 14965,2445 14200,2700 Z"/>
</g>
<g id="Drawing_28">
<rect fill="none" stroke="none" x="14800" y="1800" width="2501" height="851"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="15050" y="2306">G</text>
<text x="15380" y="2306">C</text>
<text x="15685" y="2306">L</text>
<text x="15922" y="2306">K</text>
<text x="16206" y="2306">_</text>
<text x="16443" y="2306">T</text>
<text x="16705" y="2306">C</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 14200,2700 L 4965,2700 4965,3251"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_29_0" d="M 4965,3701 L 5153,3139 4778,3139 4965,3701 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 10963,2700 L 10963,3150"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_30_0" d="M 10963,3600 L 11151,3038 10776,3038 10963,3600 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 15600,2700 L 15600,13535 15160,13535"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_31_0" d="M 14548,13535 L 15313,13790 15313,13280 14548,13535 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 12100,17400 L 12100,19950"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_32_0" d="M 12100,20400 L 12288,19838 11913,19838 12100,20400 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_33_0" stroke-linejoin="round" d=""/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 4965,15006 L 4965,13800 1992,13800 1992,18530 2444,18530"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_34_0" d="M 2894,18530 L 2332,18343 2332,18718 2894,18530 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 11800,3600 L 11800,1150"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_35_0" d="M 11800,700 L 11613,1263 11988,1263 11800,700 Z"/>
</g>
<g id="Drawing_36">
<rect fill="none" stroke="none" x="7200" y="19700" width="3401" height="1200"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="7450" y="20206">I</text>
<text x="7569" y="20206">n</text>
<text x="7806" y="20206">t</text>
<text x="7924" y="20206">e</text>
<text x="8161" y="20206">r</text>
<text x="8301" y="20206">r</text>
<text x="8441" y="20206">u</text>
<text x="8678" y="20206">p</text>
<text x="8915" y="20206">t</text>
<text x="9033" y="20206">/</text>
<text fill="rgb(0,0,0)" stroke="none" x="7450" y="20680">E</text>
<text x="7734" y="20680">v</text>
<text x="7941" y="20680">e</text>
<text x="8178" y="20680">n</text>
<text x="8415" y="20680">t</text>
<text x="8534" y="20680"> </text>
<text x="8652" y="20680">C</text>
<text x="8957" y="20680">h</text>
<text x="9194" y="20680">a</text>
<text x="9431" y="20680">n</text>
<text x="9668" y="20680">n</text>
<text x="9905" y="20680">e</text>
<text x="10142" y="20680">l</text>
</g>
</g>
<g id="Drawing_37">
<rect fill="none" stroke="none" x="12100" y="300" width="3501" height="1200"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="12350" y="806">I</text>
<text x="12469" y="806">n</text>
<text x="12706" y="806">t</text>
<text x="12824" y="806">e</text>
<text x="13061" y="806">r</text>
<text x="13201" y="806">r</text>
<text x="13341" y="806">u</text>
<text x="13578" y="806">p</text>
<text x="13815" y="806">t</text>
<text x="13933" y="806">/</text>
<text fill="rgb(0,0,0)" stroke="none" x="12350" y="1280">E</text>
<text x="12634" y="1280">v</text>
<text x="12841" y="1280">e</text>
<text x="13078" y="1280">n</text>
<text x="13315" y="1280">t</text>
<text x="13434" y="1280"> </text>
<text x="13552" y="1280">C</text>
<text x="13857" y="1280">h</text>
<text x="14094" y="1280">a</text>
<text x="14331" y="1280">n</text>
<text x="14568" y="1280">n</text>
<text x="14805" y="1280">e</text>
<text x="15042" y="1280">l</text>
</g>
</g>
<g id="Drawing_38">
<rect fill="none" stroke="none" x="12300" y="19550" width="2401" height="1151"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="423" font-style="normal" font-weight="400">
<text x="12550" y="20056">W</text>
<text x="12969" y="20056">O</text>
<text x="13299" y="20056">x</text>
<text x="13507" y="20056"> </text>
<text x="13625" y="20056">O</text>
<text x="13955" y="20056">u</text>
<text x="14193" y="20056">t</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 11700,6500 L 11700,6068"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_39_0" d="M 11700,5600 L 11505,6185 11895,6185 11700,5600 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_40_0" stroke-width="50" stroke-linejoin="round" d="M 11700,7000 L 11700,6500"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 11700,7000 L 11700,9000 10963,9000 10963,11900"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_41_0" d="M 10963,12350 L 11151,11788 10776,11788 10963,12350 Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,431 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.2" baseProfile="tiny" width="160mm" height="90mm" viewBox="0 0 16000 9000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Arial" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="450"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="x" horiz-adv-x="954" d="M 15,0 L 403,552 44,1062 269,1062 432,813 C 463,766 487,726 506,694 535,738 562,777 587,811 L 766,1062 981,1062 614,562 1009,0 788,0 570,330 512,419 233,0 15,0 Z"/>
<glyph unicode="w" horiz-adv-x="1430" d="M 331,0 L 6,1062 192,1062 361,449 424,221 C 427,232 445,305 479,440 L 648,1062 833,1062 992,446 1045,243 1106,448 1288,1062 1463,1062 1131,0 944,0 775,636 734,817 519,0 331,0 Z"/>
<glyph unicode="v" horiz-adv-x="954" d="M 430,0 L 26,1062 216,1062 444,426 C 469,357 491,286 512,212 528,268 550,335 579,414 L 815,1062 1000,1062 598,0 430,0 Z"/>
<glyph unicode="u" horiz-adv-x="848" d="M 831,0 L 831,156 C 748,36 636,-24 494,-24 431,-24 373,-12 319,12 264,36 224,66 198,103 171,139 153,183 142,236 135,271 131,327 131,404 L 131,1062 311,1062 311,473 C 311,379 315,316 322,283 333,236 357,199 394,172 431,145 476,131 530,131 584,131 635,145 682,173 729,200 763,238 783,286 802,333 812,402 812,493 L 812,1062 992,1062 992,0 831,0 Z"/>
<glyph unicode="t" horiz-adv-x="504" d="M 528,161 L 554,2 C 503,-9 458,-14 418,-14 353,-14 302,-4 266,17 230,38 205,65 190,99 175,132 168,203 168,311 L 168,922 36,922 36,1062 168,1062 168,1325 347,1433 347,1062 528,1062 528,922 347,922 347,301 C 347,250 350,217 357,202 363,187 373,176 388,167 402,158 422,154 449,154 469,154 495,156 528,161 Z"/>
<glyph unicode="s" horiz-adv-x="874" d="M 63,317 L 241,345 C 251,274 279,219 325,181 370,143 434,124 516,124 599,124 660,141 700,175 740,208 760,248 760,293 760,334 742,366 707,389 682,405 621,425 523,450 391,483 300,512 249,537 198,561 159,595 133,638 106,681 93,728 93,780 93,827 104,871 126,912 147,952 177,985 214,1012 242,1033 280,1050 329,1065 377,1079 429,1086 484,1086 567,1086 641,1074 704,1050 767,1026 813,994 843,953 873,912 894,857 905,788 L 729,764 C 721,819 698,861 660,892 621,923 567,938 497,938 414,938 355,924 320,897 285,870 267,838 267,801 267,778 274,757 289,738 304,719 327,703 358,690 376,683 429,668 517,644 644,610 733,582 784,561 834,539 873,507 902,466 931,425 945,373 945,312 945,252 928,196 893,143 858,90 807,49 741,20 675,-9 600,-24 517,-24 379,-24 274,5 202,62 129,119 83,204 63,317 Z"/>
<glyph unicode="r" horiz-adv-x="557" d="M 133,0 L 133,1062 295,1062 295,901 C 336,976 375,1026 410,1050 445,1074 483,1086 525,1086 586,1086 647,1067 710,1028 L 648,861 C 604,887 560,900 516,900 477,900 441,888 410,865 379,841 356,808 343,766 323,702 313,632 313,556 L 313,0 133,0 Z"/>
<glyph unicode="p" horiz-adv-x="901" d="M 135,-407 L 135,1062 299,1062 299,924 C 338,978 381,1019 430,1046 479,1073 538,1086 607,1086 698,1086 778,1063 847,1016 916,969 969,904 1004,819 1039,734 1057,640 1057,539 1057,430 1038,333 999,246 960,159 903,92 829,46 754,-1 676,-24 594,-24 534,-24 480,-11 433,14 385,39 346,71 315,110 L 315,-407 135,-407 Z M 298,525 C 298,388 326,287 381,222 436,157 503,124 582,124 662,124 731,158 788,226 845,293 873,398 873,540 873,675 845,777 790,844 734,911 667,945 590,945 513,945 446,909 387,838 328,766 298,662 298,525 Z"/>
<glyph unicode="o" horiz-adv-x="980" d="M 68,531 C 68,728 123,873 232,968 323,1047 435,1086 566,1086 712,1086 831,1038 924,943 1017,847 1063,715 1063,546 1063,409 1043,302 1002,224 961,145 901,84 823,41 744,-2 659,-24 566,-24 417,-24 297,24 206,119 114,214 68,352 68,531 Z M 253,531 C 253,395 283,293 342,226 401,158 476,124 566,124 655,124 730,158 789,226 848,294 878,398 878,537 878,668 848,768 789,836 729,903 655,937 566,937 476,937 401,903 342,836 283,769 253,667 253,531 Z"/>
<glyph unicode="n" horiz-adv-x="848" d="M 135,0 L 135,1062 297,1062 297,911 C 375,1028 488,1086 635,1086 699,1086 758,1075 812,1052 865,1029 905,998 932,961 959,924 977,879 988,828 995,795 998,736 998,653 L 998,0 818,0 818,646 C 818,719 811,774 797,811 783,847 758,876 723,898 687,919 645,930 597,930 520,930 454,906 399,857 343,808 315,716 315,580 L 315,0 135,0 Z"/>
<glyph unicode="m" horiz-adv-x="1457" d="M 135,0 L 135,1062 296,1062 296,913 C 329,965 374,1007 429,1039 484,1070 547,1086 618,1086 697,1086 761,1070 812,1037 862,1004 897,959 918,900 1002,1024 1111,1086 1246,1086 1351,1086 1432,1057 1489,999 1546,940 1574,850 1574,729 L 1574,0 1395,0 1395,669 C 1395,741 1389,793 1378,825 1366,856 1345,882 1314,901 1283,920 1247,930 1206,930 1131,930 1069,905 1020,856 971,806 946,726 946,617 L 946,0 766,0 766,690 C 766,770 751,830 722,870 693,910 645,930 578,930 527,930 481,917 438,890 395,863 363,824 344,773 325,722 315,648 315,551 L 315,0 135,0 Z"/>
<glyph unicode="l" horiz-adv-x="186" d="M 131,0 L 131,1466 311,1466 311,0 131,0 Z"/>
<glyph unicode="i" horiz-adv-x="160" d="M 136,1259 L 136,1466 316,1466 316,1259 136,1259 Z M 136,0 L 136,1062 316,1062 316,0 136,0 Z"/>
<glyph unicode="h" horiz-adv-x="848" d="M 135,0 L 135,1466 315,1466 315,940 C 399,1037 505,1086 633,1086 712,1086 780,1071 838,1040 896,1009 938,966 963,911 988,856 1000,777 1000,673 L 1000,0 820,0 820,673 C 820,763 801,829 762,870 723,911 667,931 596,931 543,931 493,917 446,890 399,862 365,824 345,777 325,730 315,664 315,581 L 315,0 135,0 Z"/>
<glyph unicode="g" horiz-adv-x="927" d="M 102,-88 L 277,-114 C 284,-168 305,-207 338,-232 383,-265 444,-282 521,-282 604,-282 669,-265 714,-232 759,-199 790,-152 806,-92 815,-55 820,22 819,139 740,46 642,0 525,0 379,0 266,53 186,158 106,263 66,390 66,537 66,638 84,732 121,818 158,903 211,969 281,1016 350,1063 432,1086 526,1086 651,1086 755,1035 836,934 L 836,1062 1002,1062 1002,144 C 1002,-21 985,-138 952,-207 918,-276 865,-331 792,-371 719,-411 629,-431 522,-431 395,-431 293,-402 215,-345 137,-288 99,-203 102,-88 Z M 251,550 C 251,411 279,309 334,245 389,181 459,149 542,149 625,149 694,181 750,245 806,308 834,408 834,544 834,674 805,772 748,838 690,904 620,937 539,937 459,937 391,905 335,840 279,775 251,678 251,550 Z"/>
<glyph unicode="e" horiz-adv-x="980" d="M 862,342 L 1048,319 C 1019,210 964,126 885,66 806,6 704,-24 581,-24 426,-24 303,24 212,120 121,215 75,349 75,522 75,701 121,839 213,938 305,1037 424,1086 571,1086 713,1086 829,1038 919,941 1009,844 1054,708 1054,533 1054,522 1054,506 1053,485 L 261,485 C 268,368 301,279 360,217 419,155 493,124 582,124 648,124 704,141 751,176 798,211 835,266 862,342 Z M 271,633 L 864,633 C 856,722 833,789 796,834 739,903 664,938 573,938 490,938 421,910 365,855 308,800 277,726 271,633 Z"/>
<glyph unicode="d" horiz-adv-x="927" d="M 824,0 L 824,134 C 757,29 658,-24 527,-24 442,-24 365,-1 294,46 223,93 168,158 129,242 90,325 70,421 70,530 70,636 88,732 123,819 158,905 211,971 282,1017 353,1063 432,1086 519,1086 583,1086 640,1073 690,1046 740,1019 781,983 812,940 L 812,1466 991,1466 991,0 824,0 Z M 255,530 C 255,394 284,292 341,225 398,158 466,124 544,124 623,124 690,156 745,221 800,285 827,383 827,515 827,660 799,767 743,835 687,903 618,937 536,937 456,937 389,904 336,839 282,774 255,671 255,530 Z"/>
<glyph unicode="c" horiz-adv-x="927" d="M 828,389 L 1005,366 C 986,244 936,149 857,80 777,11 679,-24 563,-24 418,-24 301,24 213,119 124,214 80,350 80,527 80,642 99,742 137,828 175,914 233,979 311,1022 388,1065 473,1086 564,1086 679,1086 774,1057 847,999 920,940 967,857 988,750 L 813,723 C 796,794 767,848 725,884 682,920 631,938 571,938 480,938 407,906 350,841 293,776 265,673 265,532 265,389 292,286 347,221 402,156 473,124 561,124 632,124 691,146 738,189 785,232 815,299 828,389 Z"/>
<glyph unicode="b" horiz-adv-x="901" d="M 301,0 L 134,0 134,1466 314,1466 314,943 C 390,1038 487,1086 605,1086 670,1086 732,1073 791,1047 849,1020 897,983 935,936 972,888 1002,830 1023,763 1044,696 1055,624 1055,547 1055,365 1010,224 920,125 830,26 722,-24 596,-24 471,-24 372,28 301,133 L 301,0 Z M 299,539 C 299,412 316,320 351,263 408,170 484,124 581,124 660,124 728,158 785,227 842,295 871,397 871,532 871,671 844,773 789,839 734,905 667,938 589,938 510,938 442,904 385,836 328,767 299,668 299,539 Z"/>
<glyph unicode="a" horiz-adv-x="980" d="M 828,131 C 761,74 697,34 636,11 574,-12 508,-24 437,-24 320,-24 231,5 168,62 105,119 74,191 74,280 74,332 86,380 110,423 133,466 164,500 203,526 241,552 284,572 332,585 367,594 421,603 492,612 637,629 744,650 813,674 814,699 814,714 814,721 814,794 797,846 763,876 717,917 649,937 558,937 473,937 411,922 371,893 330,863 300,810 281,735 L 105,759 C 121,834 147,895 184,942 221,988 274,1024 343,1049 412,1074 493,1086 584,1086 675,1086 748,1075 805,1054 862,1033 903,1006 930,974 957,941 975,900 986,851 992,820 995,765 995,685 L 995,445 C 995,278 999,172 1007,128 1014,83 1029,41 1052,0 L 864,0 C 845,37 833,81 828,131 Z M 813,533 C 748,506 650,484 519,465 445,454 393,442 362,429 331,416 308,396 291,371 274,345 266,316 266,285 266,237 284,197 321,165 357,133 410,117 480,117 549,117 611,132 665,163 719,193 759,234 784,287 803,328 813,388 813,467 L 813,533 Z"/>
<glyph unicode="_" horiz-adv-x="1192" d="M -31,-407 L -31,-277 1162,-277 1162,-407 -31,-407 Z"/>
<glyph unicode="W" horiz-adv-x="1986" d="M 414,0 L 25,1466 224,1466 447,505 C 471,404 492,304 509,205 546,362 568,452 575,476 L 854,1466 1088,1466 1298,724 C 1351,540 1389,367 1412,205 1431,298 1455,404 1485,524 L 1715,1466 1910,1466 1508,0 1321,0 1012,1117 C 986,1210 971,1268 966,1289 951,1222 936,1164 923,1117 L 612,0 414,0 Z"/>
<glyph unicode="T" horiz-adv-x="1166" d="M 531,0 L 531,1293 48,1293 48,1466 1210,1466 1210,1293 725,1293 725,0 531,0 Z"/>
<glyph unicode="R" horiz-adv-x="1271" d="M 161,0 L 161,1466 811,1466 C 942,1466 1041,1453 1109,1427 1177,1400 1231,1354 1272,1287 1313,1220 1333,1147 1333,1066 1333,962 1299,874 1232,803 1165,732 1061,686 920,667 971,642 1010,618 1037,594 1094,542 1147,477 1198,399 L 1453,0 1209,0 1015,305 C 958,393 912,460 875,507 838,554 806,586 777,605 748,624 718,637 688,644 666,649 630,651 580,651 L 355,651 355,0 161,0 Z M 355,819 L 772,819 C 861,819 930,828 980,847 1030,865 1068,894 1094,935 1120,975 1133,1019 1133,1066 1133,1135 1108,1192 1058,1237 1007,1282 928,1304 819,1304 L 355,1304 355,819 Z"/>
<glyph unicode="P" horiz-adv-x="1113" d="M 158,0 L 158,1466 711,1466 C 808,1466 883,1461 934,1452 1006,1440 1066,1417 1115,1384 1164,1350 1203,1303 1233,1242 1262,1181 1277,1115 1277,1042 1277,917 1237,812 1158,726 1079,639 935,596 728,596 L 352,596 352,0 158,0 Z M 352,769 L 731,769 C 856,769 945,792 998,839 1051,886 1077,951 1077,1036 1077,1097 1062,1150 1031,1194 1000,1237 959,1266 908,1280 875,1289 815,1293 727,1293 L 352,1293 352,769 Z"/>
<glyph unicode="O" horiz-adv-x="1404" d="M 99,714 C 99,957 164,1148 295,1286 426,1423 594,1492 801,1492 936,1492 1058,1460 1167,1395 1276,1330 1359,1240 1416,1125 1473,1009 1501,878 1501,731 1501,582 1471,449 1411,332 1351,215 1266,126 1156,66 1046,5 927,-25 800,-25 662,-25 539,8 430,75 321,142 239,233 183,348 127,463 99,585 99,714 Z M 299,711 C 299,534 347,395 442,294 537,192 656,141 799,141 945,141 1065,192 1160,295 1254,398 1301,543 1301,732 1301,851 1281,956 1241,1045 1200,1134 1141,1203 1064,1252 986,1301 899,1325 802,1325 665,1325 547,1278 448,1184 349,1089 299,932 299,711 Z"/>
<glyph unicode="M" horiz-adv-x="1377" d="M 152,0 L 152,1466 444,1466 791,428 C 823,331 846,259 861,211 878,264 904,343 939,446 L 1290,1466 1551,1466 1551,0 1364,0 1364,1227 938,0 763,0 339,1248 339,0 152,0 Z"/>
<glyph unicode="C" horiz-adv-x="1298" d="M 1204,514 L 1398,465 C 1357,306 1284,184 1179,101 1073,17 944,-25 791,-25 633,-25 505,7 406,72 307,136 231,229 180,351 128,473 102,604 102,744 102,897 131,1030 190,1144 248,1257 331,1344 439,1403 546,1462 665,1491 794,1491 941,1491 1064,1454 1164,1379 1264,1304 1334,1199 1373,1064 L 1182,1019 C 1148,1126 1099,1203 1034,1252 969,1301 888,1325 790,1325 677,1325 583,1298 508,1244 432,1190 379,1118 348,1027 317,936 302,842 302,745 302,620 320,512 357,419 393,326 449,256 526,210 603,164 686,141 775,141 884,141 976,172 1051,235 1126,298 1177,391 1204,514 Z"/>
<glyph unicode=")" horiz-adv-x="477" d="M 253,-431 L 124,-431 C 323,-111 423,209 423,530 423,655 409,780 380,903 357,1003 326,1099 285,1191 259,1251 205,1351 124,1491 L 253,1491 C 378,1324 471,1156 531,987 582,842 608,690 608,531 608,351 574,177 505,9 436,-159 352,-306 253,-431 Z"/>
<glyph unicode="(" horiz-adv-x="478" d="M 479,-431 C 380,-306 296,-159 227,9 158,177 124,351 124,531 124,690 150,842 201,987 261,1156 354,1324 479,1491 L 608,1491 C 527,1352 474,1253 448,1194 407,1102 375,1006 352,906 323,781 309,656 309,530 309,209 409,-111 608,-431 L 479,-431 Z"/>
<glyph unicode=" " horiz-adv-x="556"/>
</font>
</defs>
<g visibility="visible" id="MasterSlide_1_Default">
<desc>Master slide
</desc>
<rect fill="none" stroke="none" x="0" y="0" width="16000" height="9000"/>
</g>
<g visibility="visible" id="Slide_1_page1">
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 2600,5382 L 2600,1732"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_1_0" d="M 2600,1282 L 2413,1845 2788,1845 2600,1282 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 2600,5382 L 13850,5382"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_2_0" d="M 14300,5382 L 13738,5195 13738,5570 14300,5382 Z"/>
</g>
<g id="Drawing_3">
<rect fill="none" stroke="none" x="13200" y="5682" width="1301" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="13450" y="6120">T</text>
<text x="13657" y="6120">i</text>
<text x="13734" y="6120">m</text>
<text x="14034" y="6120">e</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_4_0" stroke-width="50" stroke-linejoin="round" d="M 3100,5382 L 3100,2882"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_5_0" stroke-width="50" stroke-linejoin="round" d="M 3100,5382 L 2600,4882"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_6_0" stroke-width="50" stroke-linejoin="round" d="M 5600,5382 L 5600,2382"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_7_0" stroke-width="50" stroke-linejoin="round" d="M 8601,5381 L 5601,2383"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_8_0" stroke-width="50" stroke-linejoin="round" d="M 13600,5381 L 12600,4382"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_9_0" stroke-width="30" stroke-linejoin="round" stroke-dasharray="508,508,508,508" d="M 2600,2382 L 14000,2382"/>
</g>
<g id="Drawing_10">
<rect fill="none" stroke="none" x="13600" y="3182" width="2101" height="1419"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="13850" y="3620">C</text>
<text x="14104" y="3620">o</text>
<text x="14299" y="3620">m</text>
<text x="14599" y="3620">p</text>
<text x="14794" y="3620">a</text>
<text x="14989" y="3620">r</text>
<text x="15107" y="3620">e</text>
<text x="15302" y="3620"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="13850" y="4009">m</text>
<text x="14151" y="4009">a</text>
<text x="14345" y="4009">t</text>
<text x="14443" y="4009">c</text>
<text x="14620" y="4009">h</text>
<text x="14815" y="4009"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="13850" y="4398">v</text>
<text x="14024" y="4398">a</text>
<text x="14218" y="4398">l</text>
<text x="14295" y="4398">u</text>
<text x="14489" y="4398">e</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_11_0" stroke-width="50" stroke-linejoin="round" d="M 8600,5382 L 8600,3382"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_12_0" stroke-width="50" stroke-linejoin="round" d="M 9601,4383 L 8601,3383"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_13_0" stroke-width="50" stroke-linejoin="round" d="M 9601,4382 L 9601,2382"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_14_0" stroke-width="50" stroke-linejoin="round" d="M 12602,5383 L 9601,2382"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_15_0" stroke-width="50" stroke-linejoin="round" d="M 12600,5382 L 12600,4382"/>
</g>
<g id="Drawing_16">
<rect fill="none" stroke="none" x="6000" y="6542" width="4401" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="6250" y="6980">R</text>
<text x="6504" y="6980">e</text>
<text x="6699" y="6980">l</text>
<text x="6775" y="6980">o</text>
<text x="6970" y="6980">a</text>
<text x="7164" y="6980">d</text>
<text x="7359" y="6980"> </text>
<text x="7457" y="6980">t</text>
<text x="7554" y="6980">o</text>
<text x="7749" y="6980"> </text>
<text x="7842" y="6980">T</text>
<text x="8058" y="6980">O</text>
<text x="8333" y="6980">P</text>
<text x="8561" y="6980"> </text>
<text x="8659" y="6980">v</text>
<text x="8832" y="6980">a</text>
<text x="9027" y="6980">l</text>
<text x="9103" y="6980">u</text>
<text x="9298" y="6980">e</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 8400,6482 L 8519,5888"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_17_0" d="M 8600,5482 L 8329,5956 8668,6023 8600,5482 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 9600,6682 L 11917,5738"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_18_0" d="M 12300,5582 L 11756,5618 11886,5937 12300,5582 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 9700,2282 L 10542,1791"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_19_0" d="M 10900,1582 L 10366,1694 10540,1992 10900,1582 Z"/>
</g>
<g id="Drawing_20">
<rect fill="none" stroke="none" x="10651" y="553" width="4150" height="1030"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="10901" y="991">C</text>
<text x="11155" y="991">o</text>
<text x="11350" y="991">u</text>
<text x="11544" y="991">n</text>
<text x="11739" y="991">t</text>
<text x="11837" y="991"> </text>
<text x="11934" y="991">i</text>
<text x="12010" y="991">s</text>
<text x="12188" y="991"> </text>
<text x="12285" y="991">w</text>
<text x="12535" y="991">r</text>
<text x="12654" y="991">i</text>
<text x="12730" y="991">t</text>
<text x="12827" y="991">t</text>
<text x="12925" y="991">e</text>
<text x="13119" y="991">n</text>
<text x="13314" y="991"> </text>
<text x="13411" y="991">u</text>
<text x="13606" y="991">s</text>
<text x="13784" y="991">i</text>
<text x="13860" y="991">n</text>
<text x="14055" y="991">g</text>
<text x="14250" y="991"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="10901" y="1380">t</text>
<text x="10998" y="1380">c</text>
<text x="11176" y="1380">_</text>
<text x="11371" y="1380">s</text>
<text x="11549" y="1380">e</text>
<text x="11743" y="1380">t</text>
<text x="11841" y="1380">_</text>
<text x="12036" y="1380">c</text>
<text x="12213" y="1380">o</text>
<text x="12408" y="1380">u</text>
<text x="12603" y="1380">n</text>
<text x="12798" y="1380">t</text>
<text x="12895" y="1380">_</text>
<text x="13090" y="1380">v</text>
<text x="13263" y="1380">a</text>
<text x="13458" y="1380">l</text>
<text x="13534" y="1380">u</text>
<text x="13729" y="1380">e</text>
<text x="13924" y="1380">(</text>
<text x="14042" y="1380">)</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 5800,2182 L 6152,1713"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_21_0" d="M 6400,1382 L 5952,1693 6228,1900 6400,1382 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 8300,2982 L 7519,1733"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_22_0" d="M 7300,1382 L 7428,1912 7721,1729 7300,1382 Z"/>
</g>
<g id="Drawing_23">
<rect fill="none" stroke="none" x="4500" y="482" width="5601" height="1030"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="4750" y="920">T</text>
<text x="4966" y="920">O</text>
<text x="5241" y="920">P</text>
<text x="5470" y="920"> </text>
<text x="5567" y="920">v</text>
<text x="5741" y="920">a</text>
<text x="5935" y="920">l</text>
<text x="6012" y="920">u</text>
<text x="6206" y="920">e</text>
<text x="6401" y="920"> </text>
<text x="6498" y="920">h</text>
<text x="6693" y="920">a</text>
<text x="6888" y="920">s</text>
<text x="7066" y="920"> </text>
<text x="7163" y="920">b</text>
<text x="7358" y="920">e</text>
<text x="7552" y="920">e</text>
<text x="7747" y="920">n</text>
<text x="7942" y="920"> </text>
<text x="8039" y="920">c</text>
<text x="8217" y="920">h</text>
<text x="8412" y="920">a</text>
<text x="8607" y="920">n</text>
<text x="8801" y="920">g</text>
<text x="8996" y="920">e</text>
<text x="9191" y="920">d</text>
<text x="9386" y="920"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="4750" y="1309">u</text>
<text x="4945" y="1309">s</text>
<text x="5123" y="1309">i</text>
<text x="5199" y="1309">n</text>
<text x="5393" y="1309">g</text>
<text x="5588" y="1309"> </text>
<text x="5686" y="1309">t</text>
<text x="5783" y="1309">c</text>
<text x="5961" y="1309">_</text>
<text x="6155" y="1309">s</text>
<text x="6333" y="1309">e</text>
<text x="6528" y="1309">t</text>
<text x="6625" y="1309">_</text>
<text x="6820" y="1309">t</text>
<text x="6917" y="1309">o</text>
<text x="7112" y="1309">p</text>
<text x="7307" y="1309">_</text>
<text x="7502" y="1309">v</text>
<text x="7675" y="1309">a</text>
<text x="7870" y="1309">l</text>
<text x="7946" y="1309">u</text>
<text x="8141" y="1309">e</text>
<text x="8336" y="1309">(</text>
<text x="8454" y="1309">)</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_24_0" stroke-width="100" stroke-linejoin="round" stroke-dasharray="197,197" d="M 2600,4882 L 14200,4882"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_25_0" stroke-width="50" stroke-linejoin="round" d="M 3100,8407 L 5100,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_26_0" stroke-width="50" stroke-linejoin="round" d="M 5100,7407 L 5100,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_27_0" stroke-width="50" stroke-linejoin="round" d="M 5100,7407 L 5600,7407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_28_0" stroke-width="50" stroke-linejoin="round" d="M 5600,7407 L 5600,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_29_0" stroke-width="50" stroke-linejoin="round" d="M 5600,8407 L 7600,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_30_0" stroke-width="50" stroke-linejoin="round" d="M 7600,7407 L 7600,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_31_0" stroke-width="50" stroke-linejoin="round" d="M 7600,7407 L 8100,7407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_32_0" stroke-width="50" stroke-linejoin="round" d="M 8100,7407 L 8100,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_33_0" stroke-width="50" stroke-linejoin="round" d="M 12100,7407 L 12100,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_34_0" stroke-width="50" stroke-linejoin="round" d="M 12100,7407 L 12600,7407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_35_0" stroke-width="50" stroke-linejoin="round" d="M 12600,7407 L 12600,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_36_0" stroke-width="50" stroke-linejoin="round" d="M 13100,7407 L 13100,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_37_0" stroke-width="50" stroke-linejoin="round" d="M 13100,7407 L 13600,7407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_38_0" stroke-width="50" stroke-linejoin="round" d="M 13600,7407 L 13600,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_39_0" stroke-width="50" stroke-linejoin="round" d="M 8100,8407 L 12100,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_40_0" stroke-width="50" stroke-linejoin="round" d="M 4953,4649 L 5203,5082"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_41_0" stroke-width="50" stroke-linejoin="round" d="M 5300,4742 L 4867,4992"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_42_0" stroke-width="50" stroke-linejoin="round" d="M 7986,4682 L 8236,5115"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_43_0" stroke-width="50" stroke-linejoin="round" d="M 8333,4775 L 7900,5025"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_44_0" stroke-width="50" stroke-linejoin="round" d="M 11986,4649 L 12236,5082"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_45_0" stroke-width="50" stroke-linejoin="round" d="M 12333,4742 L 11900,4992"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_46_0" stroke-width="50" stroke-linejoin="round" d="M 12986,4682 L 13236,5115"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_47_0" stroke-width="50" stroke-linejoin="round" d="M 13333,4775 L 12900,5025"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_48_0" stroke-width="50" stroke-linejoin="round" d="M 12853,6453 L 13103,6886"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_49_0" stroke-width="50" stroke-linejoin="round" d="M 13200,6546 L 12767,6796"/>
</g>
<g id="Drawing_50">
<rect fill="none" stroke="none" x="13200" y="6413" width="1701" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="13450" y="6851">M</text>
<text x="13742" y="6851">a</text>
<text x="13937" y="6851">t</text>
<text x="14034" y="6851">c</text>
<text x="14212" y="6851">h</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_51_0" stroke-width="50" stroke-linejoin="round" d="M 12600,8407 L 13100,8407"/>
</g>
<g id="Drawing_52">
<rect fill="none" stroke="none" x="600" y="7182" width="2601" height="1419"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="850" y="7620">P</text>
<text x="1083" y="7620">W</text>
<text x="1434" y="7620">M</text>
<text x="1726" y="7620"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="850" y="8009">i</text>
<text x="926" y="8009">n</text>
<text x="1121" y="8009">v</text>
<text x="1295" y="8009">e</text>
<text x="1489" y="8009">r</text>
<text x="1608" y="8009">t</text>
<text x="1705" y="8009">e</text>
<text x="1900" y="8009">d</text>
<text x="2095" y="8009"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="850" y="8398">o</text>
<text x="1045" y="8398">u</text>
<text x="1239" y="8398">t</text>
<text x="1337" y="8398">p</text>
<text x="1532" y="8398">u</text>
<text x="1726" y="8398">t</text>
</g>
</g>
<g id="Drawing_53">
<rect fill="none" stroke="none" x="13300" y="1742" width="2101" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="13550" y="2180">M</text>
<text x="13842" y="2180">a</text>
<text x="14037" y="2180">x</text>
</g>
</g>
<g id="Drawing_54">
<rect fill="none" stroke="none" x="0" y="1171" width="2001" height="1030"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="376" y="1609">C</text>
<text x="630" y="1609">o</text>
<text x="825" y="1609">u</text>
<text x="1019" y="1609">n</text>
<text x="1214" y="1609">t</text>
<text x="1312" y="1609">e</text>
<text x="1506" y="1609">r</text>
<text x="1625" y="1609"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="583" y="1998">v</text>
<text x="757" y="1998">a</text>
<text x="951" y="1998">l</text>
<text x="1028" y="1998">u</text>
<text x="1222" y="1998">e</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_55_0" stroke-width="50" stroke-linejoin="round" d="M 5600,5379 L 3100,2880"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_56_0" stroke-width="50" stroke-linejoin="round" d="M 2600,7407 L 2600,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_57_0" stroke-width="50" stroke-linejoin="round" d="M 2600,7407 L 3100,7407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_58_0" stroke-width="50" stroke-linejoin="round" d="M 3100,7407 L 3100,8407"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 6700,6482 L 6175,5891"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_59_0" d="M 5900,5582 L 6115,6083 6373,5854 5900,5582 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 6000,6682 L 3590,5821"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_60_0" d="M 3200,5682 L 3629,6019 3745,5694 3200,5682 Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -0,0 +1,386 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.2" baseProfile="tiny" width="160mm" height="90mm" viewBox="0 0 16000 9000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Arial" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="450"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="z" horiz-adv-x="928" d="M 40,0 L 40,146 716,922 C 639,918 572,916 513,916 L 80,916 80,1062 948,1062 948,943 373,269 262,146 C 343,152 418,155 489,155 L 980,155 980,0 40,0 Z"/>
<glyph unicode="x" horiz-adv-x="954" d="M 15,0 L 403,552 44,1062 269,1062 432,813 C 463,766 487,726 506,694 535,738 562,777 587,811 L 766,1062 981,1062 614,562 1009,0 788,0 570,330 512,419 233,0 15,0 Z"/>
<glyph unicode="w" horiz-adv-x="1430" d="M 331,0 L 6,1062 192,1062 361,449 424,221 C 427,232 445,305 479,440 L 648,1062 833,1062 992,446 1045,243 1106,448 1288,1062 1463,1062 1131,0 944,0 775,636 734,817 519,0 331,0 Z"/>
<glyph unicode="v" horiz-adv-x="954" d="M 430,0 L 26,1062 216,1062 444,426 C 469,357 491,286 512,212 528,268 550,335 579,414 L 815,1062 1000,1062 598,0 430,0 Z"/>
<glyph unicode="u" horiz-adv-x="848" d="M 831,0 L 831,156 C 748,36 636,-24 494,-24 431,-24 373,-12 319,12 264,36 224,66 198,103 171,139 153,183 142,236 135,271 131,327 131,404 L 131,1062 311,1062 311,473 C 311,379 315,316 322,283 333,236 357,199 394,172 431,145 476,131 530,131 584,131 635,145 682,173 729,200 763,238 783,286 802,333 812,402 812,493 L 812,1062 992,1062 992,0 831,0 Z"/>
<glyph unicode="t" horiz-adv-x="504" d="M 528,161 L 554,2 C 503,-9 458,-14 418,-14 353,-14 302,-4 266,17 230,38 205,65 190,99 175,132 168,203 168,311 L 168,922 36,922 36,1062 168,1062 168,1325 347,1433 347,1062 528,1062 528,922 347,922 347,301 C 347,250 350,217 357,202 363,187 373,176 388,167 402,158 422,154 449,154 469,154 495,156 528,161 Z"/>
<glyph unicode="s" horiz-adv-x="874" d="M 63,317 L 241,345 C 251,274 279,219 325,181 370,143 434,124 516,124 599,124 660,141 700,175 740,208 760,248 760,293 760,334 742,366 707,389 682,405 621,425 523,450 391,483 300,512 249,537 198,561 159,595 133,638 106,681 93,728 93,780 93,827 104,871 126,912 147,952 177,985 214,1012 242,1033 280,1050 329,1065 377,1079 429,1086 484,1086 567,1086 641,1074 704,1050 767,1026 813,994 843,953 873,912 894,857 905,788 L 729,764 C 721,819 698,861 660,892 621,923 567,938 497,938 414,938 355,924 320,897 285,870 267,838 267,801 267,778 274,757 289,738 304,719 327,703 358,690 376,683 429,668 517,644 644,610 733,582 784,561 834,539 873,507 902,466 931,425 945,373 945,312 945,252 928,196 893,143 858,90 807,49 741,20 675,-9 600,-24 517,-24 379,-24 274,5 202,62 129,119 83,204 63,317 Z"/>
<glyph unicode="r" horiz-adv-x="557" d="M 133,0 L 133,1062 295,1062 295,901 C 336,976 375,1026 410,1050 445,1074 483,1086 525,1086 586,1086 647,1067 710,1028 L 648,861 C 604,887 560,900 516,900 477,900 441,888 410,865 379,841 356,808 343,766 323,702 313,632 313,556 L 313,0 133,0 Z"/>
<glyph unicode="p" horiz-adv-x="901" d="M 135,-407 L 135,1062 299,1062 299,924 C 338,978 381,1019 430,1046 479,1073 538,1086 607,1086 698,1086 778,1063 847,1016 916,969 969,904 1004,819 1039,734 1057,640 1057,539 1057,430 1038,333 999,246 960,159 903,92 829,46 754,-1 676,-24 594,-24 534,-24 480,-11 433,14 385,39 346,71 315,110 L 315,-407 135,-407 Z M 298,525 C 298,388 326,287 381,222 436,157 503,124 582,124 662,124 731,158 788,226 845,293 873,398 873,540 873,675 845,777 790,844 734,911 667,945 590,945 513,945 446,909 387,838 328,766 298,662 298,525 Z"/>
<glyph unicode="o" horiz-adv-x="980" d="M 68,531 C 68,728 123,873 232,968 323,1047 435,1086 566,1086 712,1086 831,1038 924,943 1017,847 1063,715 1063,546 1063,409 1043,302 1002,224 961,145 901,84 823,41 744,-2 659,-24 566,-24 417,-24 297,24 206,119 114,214 68,352 68,531 Z M 253,531 C 253,395 283,293 342,226 401,158 476,124 566,124 655,124 730,158 789,226 848,294 878,398 878,537 878,668 848,768 789,836 729,903 655,937 566,937 476,937 401,903 342,836 283,769 253,667 253,531 Z"/>
<glyph unicode="n" horiz-adv-x="848" d="M 135,0 L 135,1062 297,1062 297,911 C 375,1028 488,1086 635,1086 699,1086 758,1075 812,1052 865,1029 905,998 932,961 959,924 977,879 988,828 995,795 998,736 998,653 L 998,0 818,0 818,646 C 818,719 811,774 797,811 783,847 758,876 723,898 687,919 645,930 597,930 520,930 454,906 399,857 343,808 315,716 315,580 L 315,0 135,0 Z"/>
<glyph unicode="m" horiz-adv-x="1457" d="M 135,0 L 135,1062 296,1062 296,913 C 329,965 374,1007 429,1039 484,1070 547,1086 618,1086 697,1086 761,1070 812,1037 862,1004 897,959 918,900 1002,1024 1111,1086 1246,1086 1351,1086 1432,1057 1489,999 1546,940 1574,850 1574,729 L 1574,0 1395,0 1395,669 C 1395,741 1389,793 1378,825 1366,856 1345,882 1314,901 1283,920 1247,930 1206,930 1131,930 1069,905 1020,856 971,806 946,726 946,617 L 946,0 766,0 766,690 C 766,770 751,830 722,870 693,910 645,930 578,930 527,930 481,917 438,890 395,863 363,824 344,773 325,722 315,648 315,551 L 315,0 135,0 Z"/>
<glyph unicode="l" horiz-adv-x="186" d="M 131,0 L 131,1466 311,1466 311,0 131,0 Z"/>
<glyph unicode="i" horiz-adv-x="160" d="M 136,1259 L 136,1466 316,1466 316,1259 136,1259 Z M 136,0 L 136,1062 316,1062 316,0 136,0 Z"/>
<glyph unicode="h" horiz-adv-x="848" d="M 135,0 L 135,1466 315,1466 315,940 C 399,1037 505,1086 633,1086 712,1086 780,1071 838,1040 896,1009 938,966 963,911 988,856 1000,777 1000,673 L 1000,0 820,0 820,673 C 820,763 801,829 762,870 723,911 667,931 596,931 543,931 493,917 446,890 399,862 365,824 345,777 325,730 315,664 315,581 L 315,0 135,0 Z"/>
<glyph unicode="g" horiz-adv-x="927" d="M 102,-88 L 277,-114 C 284,-168 305,-207 338,-232 383,-265 444,-282 521,-282 604,-282 669,-265 714,-232 759,-199 790,-152 806,-92 815,-55 820,22 819,139 740,46 642,0 525,0 379,0 266,53 186,158 106,263 66,390 66,537 66,638 84,732 121,818 158,903 211,969 281,1016 350,1063 432,1086 526,1086 651,1086 755,1035 836,934 L 836,1062 1002,1062 1002,144 C 1002,-21 985,-138 952,-207 918,-276 865,-331 792,-371 719,-411 629,-431 522,-431 395,-431 293,-402 215,-345 137,-288 99,-203 102,-88 Z M 251,550 C 251,411 279,309 334,245 389,181 459,149 542,149 625,149 694,181 750,245 806,308 834,408 834,544 834,674 805,772 748,838 690,904 620,937 539,937 459,937 391,905 335,840 279,775 251,678 251,550 Z"/>
<glyph unicode="e" horiz-adv-x="980" d="M 862,342 L 1048,319 C 1019,210 964,126 885,66 806,6 704,-24 581,-24 426,-24 303,24 212,120 121,215 75,349 75,522 75,701 121,839 213,938 305,1037 424,1086 571,1086 713,1086 829,1038 919,941 1009,844 1054,708 1054,533 1054,522 1054,506 1053,485 L 261,485 C 268,368 301,279 360,217 419,155 493,124 582,124 648,124 704,141 751,176 798,211 835,266 862,342 Z M 271,633 L 864,633 C 856,722 833,789 796,834 739,903 664,938 573,938 490,938 421,910 365,855 308,800 277,726 271,633 Z"/>
<glyph unicode="d" horiz-adv-x="927" d="M 824,0 L 824,134 C 757,29 658,-24 527,-24 442,-24 365,-1 294,46 223,93 168,158 129,242 90,325 70,421 70,530 70,636 88,732 123,819 158,905 211,971 282,1017 353,1063 432,1086 519,1086 583,1086 640,1073 690,1046 740,1019 781,983 812,940 L 812,1466 991,1466 991,0 824,0 Z M 255,530 C 255,394 284,292 341,225 398,158 466,124 544,124 623,124 690,156 745,221 800,285 827,383 827,515 827,660 799,767 743,835 687,903 618,937 536,937 456,937 389,904 336,839 282,774 255,671 255,530 Z"/>
<glyph unicode="c" horiz-adv-x="927" d="M 828,389 L 1005,366 C 986,244 936,149 857,80 777,11 679,-24 563,-24 418,-24 301,24 213,119 124,214 80,350 80,527 80,642 99,742 137,828 175,914 233,979 311,1022 388,1065 473,1086 564,1086 679,1086 774,1057 847,999 920,940 967,857 988,750 L 813,723 C 796,794 767,848 725,884 682,920 631,938 571,938 480,938 407,906 350,841 293,776 265,673 265,532 265,389 292,286 347,221 402,156 473,124 561,124 632,124 691,146 738,189 785,232 815,299 828,389 Z"/>
<glyph unicode="b" horiz-adv-x="901" d="M 301,0 L 134,0 134,1466 314,1466 314,943 C 390,1038 487,1086 605,1086 670,1086 732,1073 791,1047 849,1020 897,983 935,936 972,888 1002,830 1023,763 1044,696 1055,624 1055,547 1055,365 1010,224 920,125 830,26 722,-24 596,-24 471,-24 372,28 301,133 L 301,0 Z M 299,539 C 299,412 316,320 351,263 408,170 484,124 581,124 660,124 728,158 785,227 842,295 871,397 871,532 871,671 844,773 789,839 734,905 667,938 589,938 510,938 442,904 385,836 328,767 299,668 299,539 Z"/>
<glyph unicode="a" horiz-adv-x="980" d="M 828,131 C 761,74 697,34 636,11 574,-12 508,-24 437,-24 320,-24 231,5 168,62 105,119 74,191 74,280 74,332 86,380 110,423 133,466 164,500 203,526 241,552 284,572 332,585 367,594 421,603 492,612 637,629 744,650 813,674 814,699 814,714 814,721 814,794 797,846 763,876 717,917 649,937 558,937 473,937 411,922 371,893 330,863 300,810 281,735 L 105,759 C 121,834 147,895 184,942 221,988 274,1024 343,1049 412,1074 493,1086 584,1086 675,1086 748,1075 805,1054 862,1033 903,1006 930,974 957,941 975,900 986,851 992,820 995,765 995,685 L 995,445 C 995,278 999,172 1007,128 1014,83 1029,41 1052,0 L 864,0 C 845,37 833,81 828,131 Z M 813,533 C 748,506 650,484 519,465 445,454 393,442 362,429 331,416 308,396 291,371 274,345 266,316 266,285 266,237 284,197 321,165 357,133 410,117 480,117 549,117 611,132 665,163 719,193 759,234 784,287 803,328 813,388 813,467 L 813,533 Z"/>
<glyph unicode="_" horiz-adv-x="1192" d="M -31,-407 L -31,-277 1162,-277 1162,-407 -31,-407 Z"/>
<glyph unicode="W" horiz-adv-x="1986" d="M 414,0 L 25,1466 224,1466 447,505 C 471,404 492,304 509,205 546,362 568,452 575,476 L 854,1466 1088,1466 1298,724 C 1351,540 1389,367 1412,205 1431,298 1455,404 1485,524 L 1715,1466 1910,1466 1508,0 1321,0 1012,1117 C 986,1210 971,1268 966,1289 951,1222 936,1164 923,1117 L 612,0 414,0 Z"/>
<glyph unicode="T" horiz-adv-x="1166" d="M 531,0 L 531,1293 48,1293 48,1466 1210,1466 1210,1293 725,1293 725,0 531,0 Z"/>
<glyph unicode="R" horiz-adv-x="1271" d="M 161,0 L 161,1466 811,1466 C 942,1466 1041,1453 1109,1427 1177,1400 1231,1354 1272,1287 1313,1220 1333,1147 1333,1066 1333,962 1299,874 1232,803 1165,732 1061,686 920,667 971,642 1010,618 1037,594 1094,542 1147,477 1198,399 L 1453,0 1209,0 1015,305 C 958,393 912,460 875,507 838,554 806,586 777,605 748,624 718,637 688,644 666,649 630,651 580,651 L 355,651 355,0 161,0 Z M 355,819 L 772,819 C 861,819 930,828 980,847 1030,865 1068,894 1094,935 1120,975 1133,1019 1133,1066 1133,1135 1108,1192 1058,1237 1007,1282 928,1304 819,1304 L 355,1304 355,819 Z"/>
<glyph unicode="P" horiz-adv-x="1113" d="M 158,0 L 158,1466 711,1466 C 808,1466 883,1461 934,1452 1006,1440 1066,1417 1115,1384 1164,1350 1203,1303 1233,1242 1262,1181 1277,1115 1277,1042 1277,917 1237,812 1158,726 1079,639 935,596 728,596 L 352,596 352,0 158,0 Z M 352,769 L 731,769 C 856,769 945,792 998,839 1051,886 1077,951 1077,1036 1077,1097 1062,1150 1031,1194 1000,1237 959,1266 908,1280 875,1289 815,1293 727,1293 L 352,1293 352,769 Z"/>
<glyph unicode="O" horiz-adv-x="1404" d="M 99,714 C 99,957 164,1148 295,1286 426,1423 594,1492 801,1492 936,1492 1058,1460 1167,1395 1276,1330 1359,1240 1416,1125 1473,1009 1501,878 1501,731 1501,582 1471,449 1411,332 1351,215 1266,126 1156,66 1046,5 927,-25 800,-25 662,-25 539,8 430,75 321,142 239,233 183,348 127,463 99,585 99,714 Z M 299,711 C 299,534 347,395 442,294 537,192 656,141 799,141 945,141 1065,192 1160,295 1254,398 1301,543 1301,732 1301,851 1281,956 1241,1045 1200,1134 1141,1203 1064,1252 986,1301 899,1325 802,1325 665,1325 547,1278 448,1184 349,1089 299,932 299,711 Z"/>
<glyph unicode="M" horiz-adv-x="1377" d="M 152,0 L 152,1466 444,1466 791,428 C 823,331 846,259 861,211 878,264 904,343 939,446 L 1290,1466 1551,1466 1551,0 1364,0 1364,1227 938,0 763,0 339,1248 339,0 152,0 Z"/>
<glyph unicode="C" horiz-adv-x="1298" d="M 1204,514 L 1398,465 C 1357,306 1284,184 1179,101 1073,17 944,-25 791,-25 633,-25 505,7 406,72 307,136 231,229 180,351 128,473 102,604 102,744 102,897 131,1030 190,1144 248,1257 331,1344 439,1403 546,1462 665,1491 794,1491 941,1491 1064,1454 1164,1379 1264,1304 1334,1199 1373,1064 L 1182,1019 C 1148,1126 1099,1203 1034,1252 969,1301 888,1325 790,1325 677,1325 583,1298 508,1244 432,1190 379,1118 348,1027 317,936 302,842 302,745 302,620 320,512 357,419 393,326 449,256 526,210 603,164 686,141 775,141 884,141 976,172 1051,235 1126,298 1177,391 1204,514 Z"/>
<glyph unicode="=" horiz-adv-x="953" d="M 1082,862 L 114,862 114,1030 1082,1030 1082,862 Z M 1082,417 L 114,417 114,585 1082,585 1082,417 Z"/>
<glyph unicode=")" horiz-adv-x="477" d="M 253,-431 L 124,-431 C 323,-111 423,209 423,530 423,655 409,780 380,903 357,1003 326,1099 285,1191 259,1251 205,1351 124,1491 L 253,1491 C 378,1324 471,1156 531,987 582,842 608,690 608,531 608,351 574,177 505,9 436,-159 352,-306 253,-431 Z"/>
<glyph unicode="(" horiz-adv-x="478" d="M 479,-431 C 380,-306 296,-159 227,9 158,177 124,351 124,531 124,690 150,842 201,987 261,1156 354,1324 479,1491 L 608,1491 C 527,1352 474,1253 448,1194 407,1102 375,1006 352,906 323,781 309,656 309,530 309,209 409,-111 608,-431 L 479,-431 Z"/>
<glyph unicode=" " horiz-adv-x="556"/>
</font>
</defs>
<g visibility="visible" id="MasterSlide_1_Default">
<desc>Master slide
</desc>
<rect fill="none" stroke="none" x="0" y="0" width="16000" height="9000"/>
</g>
<g visibility="visible" id="Slide_1_page1">
<g id="Drawing_1">
<rect fill="none" stroke="none" x="200" y="1171" width="1801" height="1030"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="476" y="1609">C</text>
<text x="730" y="1609">o</text>
<text x="925" y="1609">u</text>
<text x="1119" y="1609">n</text>
<text x="1314" y="1609">t</text>
<text x="1412" y="1609">e</text>
<text x="1606" y="1609">r</text>
<text x="1725" y="1609"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="683" y="1998">v</text>
<text x="857" y="1998">a</text>
<text x="1051" y="1998">l</text>
<text x="1128" y="1998">u</text>
<text x="1322" y="1998">e</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_2_0" stroke-width="50" stroke-linejoin="round" d="M 12486,1900 L 12736,2333"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_3_0" stroke-width="50" stroke-linejoin="round" d="M 12833,1993 L 12400,2243"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 2100,4600 L 2100,950"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_4_0" d="M 2100,500 L 1913,1063 2288,1063 2100,500 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 2100,4600 L 13350,4600"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_5_0" d="M 13800,4600 L 13238,4413 13238,4788 13800,4600 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_6_0" stroke-width="50" stroke-linejoin="round" d="M 2600,4600 L 5100,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_7_0" stroke-width="50" stroke-linejoin="round" d="M 5100,4600 L 5100,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_8_0" stroke-width="50" stroke-linejoin="round" d="M 5100,4600 L 7600,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_9_0" stroke-width="50" stroke-linejoin="round" d="M 7600,4600 L 7600,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_10_0" stroke-width="50" stroke-linejoin="round" d="M 7600,4600 L 10100,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_11_0" stroke-width="50" stroke-linejoin="round" d="M 10100,4600 L 10100,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_12_0" stroke-width="50" stroke-linejoin="round" d="M 10100,4600 L 12600,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_13_0" stroke-width="50" stroke-linejoin="round" d="M 12590,4556 L 12590,2056"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_14_0" stroke-width="30" stroke-linejoin="round" stroke-dasharray="508,508,508,508" d="M 2100,2100 L 13500,2100"/>
</g>
<g id="Drawing_15">
<rect fill="none" stroke="none" x="12600" y="4967" width="1301" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="12850" y="5405">T</text>
<text x="13057" y="5405">i</text>
<text x="13134" y="5405">m</text>
<text x="13434" y="5405">e</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_16_0" stroke-width="100" stroke-linejoin="round" stroke-dasharray="197,197" d="M 2100,3630 L 4100,3630"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_17_0" stroke-width="100" stroke-linejoin="round" stroke-dasharray="197,197" d="M 4100,4600 L 7600,4600"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_18_0" stroke-width="100" stroke-linejoin="round" stroke-dasharray="197,197" d="M 7600,3200 L 8100,3200"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_19_0" stroke-width="100" stroke-linejoin="round" stroke-dasharray="197,197" d="M 8100,4300 L 10100,4300"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_20_0" stroke-width="100" stroke-linejoin="round" stroke-dasharray="197,197" d="M 10100,2100 L 12600,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_21_0" stroke-width="50" stroke-linejoin="round" d="M 3386,3367 L 3636,3800"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_22_0" stroke-width="50" stroke-linejoin="round" d="M 3733,3460 L 3300,3710"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_23_0" stroke-width="50" stroke-linejoin="round" d="M 5053,4400 L 5303,4833"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_24_0" stroke-width="50" stroke-linejoin="round" d="M 5400,4493 L 4967,4743"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_25_0" stroke-width="50" stroke-linejoin="round" d="M 12600,4600 L 13100,4100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_26_0" stroke-width="50" stroke-linejoin="round" d="M 2600,7100 L 3600,7100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_27_0" stroke-width="50" stroke-linejoin="round" d="M 2600,8100 L 2600,7100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_28_0" stroke-width="50" stroke-linejoin="round" d="M 3600,7100 L 3600,8100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_29_0" stroke-width="50" stroke-linejoin="round" d="M 3600,8100 L 7100,8100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_30_0" stroke-width="50" stroke-linejoin="round" d="M 7100,7100 L 12900,7100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_31_0" stroke-width="50" stroke-linejoin="round" d="M 7100,7100 L 7100,8100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_32_0" stroke-width="50" stroke-linejoin="round" d="M 12900,7100 L 12900,8100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_33_0" stroke-width="100" stroke-linejoin="round" stroke-dasharray="197,197" d="M 12600,4300 L 14600,4300"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_34_0" stroke-width="50" stroke-linejoin="round" d="M 11686,5800 L 11936,6233"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_35_0" stroke-width="50" stroke-linejoin="round" d="M 12033,5893 L 11600,6143"/>
</g>
<g id="Drawing_36">
<rect fill="none" stroke="none" x="12300" y="5760" width="1701" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="12550" y="6198">M</text>
<text x="12842" y="6198">a</text>
<text x="13037" y="6198">t</text>
<text x="13134" y="6198">c</text>
<text x="13312" y="6198">h</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_37_0" stroke-width="50" stroke-linejoin="round" d="M 12853,4067 L 13103,4500"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_38_0" stroke-width="50" stroke-linejoin="round" d="M 13200,4160 L 12767,4410"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_39_0" stroke-width="50" stroke-linejoin="round" d="M 12900,8100 L 13500,8100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_40_0" stroke-width="50" stroke-linejoin="round" d="M 2100,8100 L 2600,8100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_41_0" stroke-width="50" stroke-linejoin="round" d="M 2600,4600 L 2600,2100"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" id="Drawing_42_0" stroke-width="50" stroke-linejoin="round" d="M 2100,2600 L 2600,2100"/>
</g>
<g id="Drawing_43">
<rect fill="none" stroke="none" x="500" y="7171" width="1901" height="1030"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="750" y="7609">P</text>
<text x="983" y="7609">W</text>
<text x="1334" y="7609">M</text>
<text x="1626" y="7609"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="750" y="7998">o</text>
<text x="945" y="7998">u</text>
<text x="1139" y="7998">t</text>
<text x="1237" y="7998">p</text>
<text x="1432" y="7998">u</text>
<text x="1626" y="7998">t</text>
</g>
</g>
<g id="Drawing_44">
<rect fill="none" stroke="none" x="6000" y="200" width="4401" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="6250" y="638">R</text>
<text x="6504" y="638">e</text>
<text x="6699" y="638">l</text>
<text x="6775" y="638">o</text>
<text x="6970" y="638">a</text>
<text x="7164" y="638">d</text>
<text x="7359" y="638"> </text>
<text x="7457" y="638">c</text>
<text x="7634" y="638">o</text>
<text x="7829" y="638">u</text>
<text x="8024" y="638">n</text>
<text x="8219" y="638">t</text>
<text x="8316" y="638">e</text>
<text x="8511" y="638">r</text>
<text x="8629" y="638"> </text>
<text x="8727" y="638">t</text>
<text x="8824" y="638">o</text>
<text x="9019" y="638"> </text>
<text x="9116" y="638">z</text>
<text x="9285" y="638">e</text>
<text x="9480" y="638">r</text>
<text x="9599" y="638">o</text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 9200,800 L 11910,1762"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_45_0" d="M 12300,1900 L 11870,1564 11755,1890 12300,1900 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 8500,800 L 9586,1731"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_46_0" d="M 9900,2000 L 9619,1532 9395,1794 9900,2000 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 7800,700 L 7668,1492"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_47_0" d="M 7600,1900 L 7855,1418 7515,1361 7600,1900 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 7200,700 L 5452,1782"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_48_0" d="M 5100,2000 L 5631,1874 5449,1581 5100,2000 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 6600,700 L 3294,1772"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_49_0" d="M 2900,1900 L 3445,1904 3339,1576 2900,1900 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 7700,5400 L 7870,5144"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_50_0" d="M 8100,4800 L 7669,5135 7956,5326 8100,4800 Z"/>
</g>
<g id="Drawing_51">
<rect fill="none" stroke="none" x="4100" y="5571" width="5901" height="1030"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="4350" y="6009">C</text>
<text x="4604" y="6009">o</text>
<text x="4799" y="6009">m</text>
<text x="5099" y="6009">p</text>
<text x="5294" y="6009">a</text>
<text x="5489" y="6009">r</text>
<text x="5607" y="6009">e</text>
<text x="5802" y="6009"> </text>
<text x="5899" y="6009">v</text>
<text x="6073" y="6009">a</text>
<text x="6268" y="6009">l</text>
<text x="6344" y="6009">u</text>
<text x="6539" y="6009">e</text>
<text x="6733" y="6009"> </text>
<text x="6831" y="6009">h</text>
<text x="7025" y="6009">a</text>
<text x="7220" y="6009">s</text>
<text x="7398" y="6009"> </text>
<text x="7495" y="6009">b</text>
<text x="7690" y="6009">e</text>
<text x="7885" y="6009">e</text>
<text x="8080" y="6009">n</text>
<text x="8274" y="6009"> </text>
<text x="8372" y="6009">c</text>
<text x="8549" y="6009">h</text>
<text x="8744" y="6009">a</text>
<text x="8939" y="6009">n</text>
<text x="9134" y="6009">g</text>
<text x="9328" y="6009">e</text>
<text x="9523" y="6009">d</text>
<text x="9718" y="6009"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="4350" y="6398">w</text>
<text x="4600" y="6398">i</text>
<text x="4676" y="6398">t</text>
<text x="4773" y="6398">h</text>
<text x="4968" y="6398"> </text>
<text x="5065" y="6398">t</text>
<text x="5163" y="6398">c</text>
<text x="5341" y="6398">_</text>
<text x="5535" y="6398">s</text>
<text x="5713" y="6398">e</text>
<text x="5908" y="6398">t</text>
<text x="6005" y="6398">_</text>
<text x="6200" y="6398">c</text>
<text x="6378" y="6398">o</text>
<text x="6573" y="6398">m</text>
<text x="6873" y="6398">p</text>
<text x="7068" y="6398">a</text>
<text x="7263" y="6398">r</text>
<text x="7381" y="6398">e</text>
<text x="7576" y="6398">_</text>
<text x="7771" y="6398">v</text>
<text x="7944" y="6398">a</text>
<text x="8139" y="6398">l</text>
<text x="8215" y="6398">u</text>
<text x="8410" y="6398">e</text>
<text x="8605" y="6398">(</text>
<text x="8723" y="6398">)</text>
<text x="8842" y="6398"> </text>
</g>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 4800,5500 L 4393,5093"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_52_0" d="M 4100,4800 L 4344,5288 4588,5044 4100,4800 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 9600,5500 L 11899,4904"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_53_0" d="M 12300,4800 L 11756,4763 11842,5097 12300,4800 Z"/>
</g>
<g>
<path fill="none" stroke="rgb(0,0,0)" d="M 9085,5400 L 9554,5048"/>
<path fill="rgb(0,0,0)" stroke="none" id="Drawing_54_0" d="M 9885,4800 L 9368,4973 9575,5249 9885,4800 Z"/>
</g>
<g id="Drawing_55">
<rect fill="none" stroke="none" x="12600" y="1360" width="2601" height="641"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="12850" y="1798">T</text>
<text x="13066" y="1798">O</text>
<text x="13341" y="1798">P</text>
<text x="13570" y="1798"> </text>
<text x="13667" y="1798">=</text>
<text x="13870" y="1798"> </text>
<text x="13968" y="1798">M</text>
<text x="14260" y="1798">a</text>
<text x="14454" y="1798">x</text>
</g>
</g>
<g id="Drawing_56">
<rect fill="none" stroke="none" x="13100" y="2782" width="2101" height="1419"/>
<g fill="rgb(0,0,0)" stroke="none" font-family="Arial" font-size="353" font-style="normal" font-weight="400">
<text x="13350" y="3220">C</text>
<text x="13604" y="3220">o</text>
<text x="13799" y="3220">m</text>
<text x="14099" y="3220">p</text>
<text x="14294" y="3220">a</text>
<text x="14489" y="3220">r</text>
<text x="14607" y="3220">e</text>
<text x="14802" y="3220"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="13350" y="3609">m</text>
<text x="13651" y="3609">a</text>
<text x="13845" y="3609">t</text>
<text x="13943" y="3609">c</text>
<text x="14120" y="3609">h</text>
<text x="14315" y="3609"> </text>
<text fill="rgb(0,0,0)" stroke="none" x="13350" y="3998">v</text>
<text x="13524" y="3998">a</text>
<text x="13718" y="3998">l</text>
<text x="13795" y="3998">u</text>
<text x="13989" y="3998">e</text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,199 @@
/**
* \file
*
* \brief SAM TC - Timer Counter Callback Driver
*
* Copyright (C) 2013-2016 Atmel Corporation. All rights reserved.
*
* \asf_license_start
*
* \page License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of Atmel may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* 4. This software may only be redistributed and used in connection with an
* Atmel microcontroller product.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* \asf_license_stop
*
*/
/*
* Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
*/
#include "tc_interrupt.h"
void *_tc_instances[TC_INST_NUM];
void _tc_interrupt_handler(uint8_t instance);
/**
* \brief Registers a callback.
*
* Registers a callback function which is implemented by the user.
*
* \note The callback must be enabled by \ref tc_enable_callback,
* in order for the interrupt handler to call it when the conditions for the
* callback type is met.
*
* \param[in] module Pointer to TC software instance struct
* \param[in] callback_func Pointer to callback function
* \param[in] callback_type Callback type given by an enum
*/
enum status_code tc_register_callback(
struct tc_module *const module,
tc_callback_t callback_func,
const enum tc_callback callback_type)
{
/* Sanity check arguments */
Assert(module);
Assert(callback_func);
/* Register callback function */
module->callback[callback_type] = callback_func;
/* Set the bit corresponding to the callback_type */
if (callback_type == TC_CALLBACK_CC_CHANNEL0) {
module->register_callback_mask |= TC_INTFLAG_MC(1);
}
else if (callback_type == TC_CALLBACK_CC_CHANNEL1) {
module->register_callback_mask |= TC_INTFLAG_MC(2);
}
else {
module->register_callback_mask |= (1 << callback_type);
}
return STATUS_OK;
}
/**
* \brief Unregisters a callback.
*
* Unregisters a callback function implemented by the user. The callback should be
* disabled before it is unregistered.
*
* \param[in] module Pointer to TC software instance struct
* \param[in] callback_type Callback type given by an enum
*/
enum status_code tc_unregister_callback(
struct tc_module *const module,
const enum tc_callback callback_type)
{
/* Sanity check arguments */
Assert(module);
/* Unregister callback function */
module->callback[callback_type] = NULL;
/* Clear the bit corresponding to the callback_type */
if (callback_type == TC_CALLBACK_CC_CHANNEL0) {
module->register_callback_mask &= ~TC_INTFLAG_MC(1);
}
else if (callback_type == TC_CALLBACK_CC_CHANNEL1) {
module->register_callback_mask &= ~TC_INTFLAG_MC(2);
}
else {
module->register_callback_mask &= ~(1 << callback_type);
}
return STATUS_OK;
}
/**
* \internal ISR handler for TC
*
* Auto-generate a set of interrupt handlers for each TC in the device.
*/
#define _TC_INTERRUPT_HANDLER(n, m) \
void TC##n##_Handler(void) \
{ \
_tc_interrupt_handler(m); \
}
#if (SAML21E) || (SAML21G) || (SAMR30E) || (SAMR30G)
_TC_INTERRUPT_HANDLER(0,0)
_TC_INTERRUPT_HANDLER(1,1)
_TC_INTERRUPT_HANDLER(4,2)
#else
MRECURSION(TC_INST_NUM, _TC_INTERRUPT_HANDLER, TC_INST_MAX_ID)
#endif
/**
* \internal Interrupt Handler for TC module
*
* Handles interrupts as they occur, it will run the callback functions
* that are registered and enabled.
*
* \param[in] instance ID of the TC instance calling the interrupt
* handler
*/
void _tc_interrupt_handler(
uint8_t instance)
{
/* Temporary variable */
uint8_t interrupt_and_callback_status_mask;
/* Get device instance from the look-up table */
struct tc_module *module
= (struct tc_module *)_tc_instances[instance];
/* Read and mask interrupt flag register */
interrupt_and_callback_status_mask = module->hw->COUNT8.INTFLAG.reg &
module->register_callback_mask &
module->enable_callback_mask;
/* Check if an Overflow interrupt has occurred */
if (interrupt_and_callback_status_mask & TC_INTFLAG_OVF) {
/* Invoke registered and enabled callback function */
(module->callback[TC_CALLBACK_OVERFLOW])(module);
/* Clear interrupt flag */
module->hw->COUNT8.INTFLAG.reg = TC_INTFLAG_OVF;
}
/* Check if an Error interrupt has occurred */
if (interrupt_and_callback_status_mask & TC_INTFLAG_ERR) {
/* Invoke registered and enabled callback function */
(module->callback[TC_CALLBACK_ERROR])(module);
/* Clear interrupt flag */
module->hw->COUNT8.INTFLAG.reg = TC_INTFLAG_ERR;
}
/* Check if an Match/Capture Channel 0 interrupt has occurred */
if (interrupt_and_callback_status_mask & TC_INTFLAG_MC(1)) {
/* Invoke registered and enabled callback function */
(module->callback[TC_CALLBACK_CC_CHANNEL0])(module);
/* Clear interrupt flag */
module->hw->COUNT8.INTFLAG.reg = TC_INTFLAG_MC(1);
}
/* Check if an Match/Capture Channel 1 interrupt has occurred */
if (interrupt_and_callback_status_mask & TC_INTFLAG_MC(2)) {
/* Invoke registered and enabled callback function */
(module->callback[TC_CALLBACK_CC_CHANNEL1])(module);
/* Clear interrupt flag */
module->hw->COUNT8.INTFLAG.reg = TC_INTFLAG_MC(2);
}
}

View File

@ -0,0 +1,179 @@
/**
* \file
*
* \brief SAM TC - Timer Counter Callback Driver
*
* Copyright (C) 2013-2016 Atmel Corporation. All rights reserved.
*
* \asf_license_start
*
* \page License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of Atmel may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* 4. This software may only be redistributed and used in connection with an
* Atmel microcontroller product.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* \asf_license_stop
*
*/
/*
* Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
*/
#ifndef TC_INTERRUPT_H_INCLUDED
#define TC_INTERRUPT_H_INCLUDED
#include "tc.h"
#include <system_interrupt.h>
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(__DOXYGEN__)
extern void *_tc_instances[TC_INST_NUM];
# define _TC_INTERRUPT_VECT_NUM(n, unused) \
SYSTEM_INTERRUPT_MODULE_TC##n,
/**
* \internal Get the interrupt vector for the given device instance
*
* \param[in] TC module instance number
*
* \return Interrupt vector for of the given TC module instance.
*/
static enum system_interrupt_vector _tc_interrupt_get_interrupt_vector(
uint32_t inst_num)
{
static uint8_t tc_interrupt_vectors[TC_INST_NUM] =
{
#if (SAML21E) || (SAML21G) || (SAMR30E) || (SAMR30G)
SYSTEM_INTERRUPT_MODULE_TC0,
SYSTEM_INTERRUPT_MODULE_TC1,
SYSTEM_INTERRUPT_MODULE_TC4
#else
MRECURSION(TC_INST_NUM, _TC_INTERRUPT_VECT_NUM, TC_INST_MAX_ID)
#endif
};
return (enum system_interrupt_vector)tc_interrupt_vectors[inst_num];
}
#endif /* !defined(__DOXYGEN__) */
/**
* \name Callback Management
* {@
*/
enum status_code tc_register_callback(
struct tc_module *const module,
tc_callback_t callback_func,
const enum tc_callback callback_type);
enum status_code tc_unregister_callback(
struct tc_module *const module,
const enum tc_callback callback_type);
/**
* \brief Enables callback.
*
* Enables the callback function registered by the \ref
* tc_register_callback. The callback function will be called from the
* interrupt handler when the conditions for the callback type are
* met. This function will also enable the appropriate interrupts.
*
* \param[in] module Pointer to TC software instance struct
* \param[in] callback_type Callback type given by an enum
*/
static inline void tc_enable_callback(
struct tc_module *const module,
const enum tc_callback callback_type)
{
/* Sanity check arguments */
Assert(module);
/* Enable interrupts for this TC module */
system_interrupt_enable(_tc_interrupt_get_interrupt_vector(_tc_get_inst_index(module->hw)));
/* Enable callback */
if (callback_type == TC_CALLBACK_CC_CHANNEL0) {
module->enable_callback_mask |= TC_INTFLAG_MC(1);
module->hw->COUNT8.INTENSET.reg = TC_INTFLAG_MC(1);
}
else if (callback_type == TC_CALLBACK_CC_CHANNEL1) {
module->enable_callback_mask |= TC_INTFLAG_MC(2);
module->hw->COUNT8.INTENSET.reg = TC_INTFLAG_MC(2);
}
else {
module->enable_callback_mask |= (1 << callback_type);
module->hw->COUNT8.INTENSET.reg = (1 << callback_type);
}
}
/**
* \brief Disables callback.
*
* Disables the callback function registered by the \ref
* tc_register_callback, and the callback will not be called from the
* interrupt routine. The function will also disable the appropriate
* interrupts.
*
* \param[in] module Pointer to TC software instance struct
* \param[in] callback_type Callback type given by an enum
*/
static inline void tc_disable_callback(
struct tc_module *const module,
const enum tc_callback callback_type){
/* Sanity check arguments */
Assert(module);
/* Disable callback */
if (callback_type == TC_CALLBACK_CC_CHANNEL0) {
module->hw->COUNT8.INTENCLR.reg = TC_INTFLAG_MC(1);
module->enable_callback_mask &= ~TC_INTFLAG_MC(1);
}
else if (callback_type == TC_CALLBACK_CC_CHANNEL1) {
module->hw->COUNT8.INTENCLR.reg = TC_INTFLAG_MC(2);
module->enable_callback_mask &= ~TC_INTFLAG_MC(2);
}
else {
module->hw->COUNT8.INTENCLR.reg = (1 << callback_type);
module->enable_callback_mask &= ~(1 << callback_type);
}
}
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* TC_INTERRUPT_H_INCLUDED */

View File

@ -0,0 +1,685 @@
/**
* \file
*
* \brief SAM TC - Timer Counter Driver
*
* Copyright (C) 2013-2015 Atmel Corporation. All rights reserved.
*
* \asf_license_start
*
* \page License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of Atmel may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* 4. This software may only be redistributed and used in connection with an
* Atmel microcontroller product.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* \asf_license_stop
*
*/
/*
* Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
*/
#include "tc.h"
#if TC_ASYNC == true
# include "tc_interrupt.h"
# include <system_interrupt.h>
/** \internal
* Converts a given TC index to its interrupt vector index.
*/
# define _TC_INTERRUPT_VECT_NUM(n, unused) \
SYSTEM_INTERRUPT_MODULE_TC##n,
#endif
#if !defined(__DOXYGEN__)
# define _TC_GCLK_ID(n,unused) TPASTE3(TC,n,_GCLK_ID) ,
# define _TC_PM_APBCMASK(n,unused) TPASTE2(PM_APBCMASK_TC,n) ,
# define TC_INST_GCLK_ID { MRECURSION(TC_INST_NUM, _TC_GCLK_ID, TC_INST_MAX_ID) }
# define TC_INST_PM_APBCMASK { MRECURSION(TC_INST_NUM, _TC_PM_APBCMASK, TC_INST_MAX_ID) }
#endif
/**
* \internal Find the index of given TC module instance.
*
* \param[in] TC module instance pointer
*
* \return Index of the given TC module instance.
*/
uint8_t _tc_get_inst_index(
Tc *const hw)
{
/* List of available TC modules. */
Tc *const tc_modules[TC_INST_NUM] = TC_INSTS;
/* Find index for TC instance. */
for (uint32_t i = 0; i < TC_INST_NUM; i++) {
if (hw == tc_modules[i]) {
return i;
}
}
/* Invalid data given. */
Assert(false);
return 0;
}
/**
* \brief Initializes a hardware TC module instance.
*
* Enables the clock and initializes the TC module, based on the given
* configuration values.
*
* \param[in,out] module_inst Pointer to the software module instance struct
* \param[in] hw Pointer to the TC hardware module
* \param[in] config Pointer to the TC configuration options struct
*
* \return Status of the initialization procedure.
*
* \retval STATUS_OK The module was initialized successfully
* \retval STATUS_BUSY Hardware module was busy when the
* initialization procedure was attempted
* \retval STATUS_INVALID_ARG An invalid configuration option or argument
* was supplied
* \retval STATUS_ERR_DENIED Hardware module was already enabled, or the
* hardware module is configured in 32-bit
* slave mode
*/
enum status_code tc_init(
struct tc_module *const module_inst,
Tc *const hw,
const struct tc_config *const config)
{
/* Sanity check arguments */
Assert(hw);
Assert(module_inst);
Assert(config);
/* Temporary variable to hold all updates to the CTRLA
* register before they are written to it */
uint16_t ctrla_tmp = 0;
/* Temporary variable to hold all updates to the CTRLBSET
* register before they are written to it */
uint8_t ctrlbset_tmp = 0;
/* Temporary variable to hold all updates to the CTRLC
* register before they are written to it */
uint8_t ctrlc_tmp = 0;
/* Temporary variable to hold TC instance number */
uint8_t instance = _tc_get_inst_index(hw);
/* Array of GLCK ID for different TC instances */
uint8_t inst_gclk_id[] = TC_INST_GCLK_ID;
/* Array of PM APBC mask bit position for different TC instances */
uint16_t inst_pm_apbmask[] = TC_INST_PM_APBCMASK;
struct system_pinmux_config pin_config;
struct system_gclk_chan_config gclk_chan_config;
#if TC_ASYNC == true
/* Initialize parameters */
for (uint8_t i = 0; i < TC_CALLBACK_N; i++) {
module_inst->callback[i] = NULL;
}
module_inst->register_callback_mask = 0x00;
module_inst->enable_callback_mask = 0x00;
/* Register this instance for callbacks*/
_tc_instances[instance] = module_inst;
#endif
/* Associate the given device instance with the hardware module */
module_inst->hw = hw;
#if SAMD09 || SAMD10 || SAMD11
/* Check if even numbered TC modules are being configured in 32-bit
* counter size. Only odd numbered counters are allowed to be
* configured in 32-bit counter size.
*/
if ((config->counter_size == TC_COUNTER_SIZE_32BIT) &&
!((instance + TC_INSTANCE_OFFSET) & 0x01)) {
Assert(false);
return STATUS_ERR_INVALID_ARG;
}
#else
/* Check if odd numbered TC modules are being configured in 32-bit
* counter size. Only even numbered counters are allowed to be
* configured in 32-bit counter size.
*/
if ((config->counter_size == TC_COUNTER_SIZE_32BIT) &&
((instance + TC_INSTANCE_OFFSET) & 0x01)) {
Assert(false);
return STATUS_ERR_INVALID_ARG;
}
#endif
/* Make the counter size variable in the module_inst struct reflect
* the counter size in the module
*/
module_inst->counter_size = config->counter_size;
if (hw->COUNT8.CTRLA.reg & TC_CTRLA_SWRST) {
/* We are in the middle of a reset. Abort. */
return STATUS_BUSY;
}
if (hw->COUNT8.STATUS.reg & TC_STATUS_SLAVE) {
/* Module is used as a slave */
return STATUS_ERR_DENIED;
}
if (hw->COUNT8.CTRLA.reg & TC_CTRLA_ENABLE) {
/* Module must be disabled before initialization. Abort. */
return STATUS_ERR_DENIED;
}
/* Set up the TC PWM out pin for channel 0 */
if (config->pwm_channel[0].enabled) {
system_pinmux_get_config_defaults(&pin_config);
pin_config.mux_position = config->pwm_channel[0].pin_mux;
pin_config.direction = SYSTEM_PINMUX_PIN_DIR_OUTPUT;
system_pinmux_pin_set_config(
config->pwm_channel[0].pin_out, &pin_config);
}
/* Set up the TC PWM out pin for channel 1 */
if (config->pwm_channel[1].enabled) {
system_pinmux_get_config_defaults(&pin_config);
pin_config.mux_position = config->pwm_channel[1].pin_mux;
pin_config.direction = SYSTEM_PINMUX_PIN_DIR_OUTPUT;
system_pinmux_pin_set_config(
config->pwm_channel[1].pin_out, &pin_config);
}
/* Enable the user interface clock in the PM */
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC,
inst_pm_apbmask[instance]);
/* Enable the slave counter if counter_size is 32-bit */
if ((config->counter_size == TC_COUNTER_SIZE_32BIT))
{
/* Enable the user interface clock in the PM */
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC,
inst_pm_apbmask[instance + 1]);
}
/* Setup clock for module */
system_gclk_chan_get_config_defaults(&gclk_chan_config);
gclk_chan_config.source_generator = config->clock_source;
system_gclk_chan_set_config(inst_gclk_id[instance], &gclk_chan_config);
system_gclk_chan_enable(inst_gclk_id[instance]);
/* Set ctrla register */
ctrla_tmp =
(uint32_t)config->counter_size |
(uint32_t)config->wave_generation |
(uint32_t)config->reload_action |
(uint32_t)config->clock_prescaler;
if (config->run_in_standby) {
ctrla_tmp |= TC_CTRLA_RUNSTDBY;
}
/* Write configuration to register */
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT8.CTRLA.reg = ctrla_tmp;
/* Set ctrlb register */
if (config->oneshot) {
ctrlbset_tmp = TC_CTRLBSET_ONESHOT;
}
if (config->count_direction) {
ctrlbset_tmp |= TC_CTRLBSET_DIR;
}
/* Clear old ctrlb configuration */
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT8.CTRLBCLR.reg = 0xFF;
/* Check if we actually need to go into a wait state. */
if (ctrlbset_tmp) {
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
/* Write configuration to register */
hw->COUNT8.CTRLBSET.reg = ctrlbset_tmp;
}
/* Set ctrlc register*/
ctrlc_tmp = config->waveform_invert_output;
for (uint8_t i = 0; i < NUMBER_OF_COMPARE_CAPTURE_CHANNELS; i++) {
if (config->enable_capture_on_channel[i] == true) {
ctrlc_tmp |= (TC_CTRLC_CPTEN(1) << i);
}
}
/* Write configuration to register */
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT8.CTRLC.reg = ctrlc_tmp;
/* Write configuration to register */
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
/* Switch for TC counter size */
switch (module_inst->counter_size) {
case TC_COUNTER_SIZE_8BIT:
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT8.COUNT.reg =
config->counter_8_bit.value;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT8.PER.reg =
config->counter_8_bit.period;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT8.CC[0].reg =
config->counter_8_bit.compare_capture_channel[0];
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT8.CC[1].reg =
config->counter_8_bit.compare_capture_channel[1];
return STATUS_OK;
case TC_COUNTER_SIZE_16BIT:
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT16.COUNT.reg
= config->counter_16_bit.value;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT16.CC[0].reg =
config->counter_16_bit.compare_capture_channel[0];
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT16.CC[1].reg =
config->counter_16_bit.compare_capture_channel[1];
return STATUS_OK;
case TC_COUNTER_SIZE_32BIT:
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT32.COUNT.reg
= config->counter_32_bit.value;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT32.CC[0].reg =
config->counter_32_bit.compare_capture_channel[0];
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
hw->COUNT32.CC[1].reg =
config->counter_32_bit.compare_capture_channel[1];
return STATUS_OK;
}
Assert(false);
return STATUS_ERR_INVALID_ARG;
}
/**
* \brief Sets TC module count value.
*
* Sets the current timer count value of a initialized TC module. The
* specified TC module may be started or stopped.
*
* \param[in] module_inst Pointer to the software module instance struct
* \param[in] count New timer count value to set
*
* \return Status of the count update procedure.
*
* \retval STATUS_OK The timer count was updated successfully
* \retval STATUS_ERR_INVALID_ARG An invalid timer counter size was specified
*/
enum status_code tc_set_count_value(
const struct tc_module *const module_inst,
const uint32_t count)
{
/* Sanity check arguments */
Assert(module_inst);
Assert(module_inst->hw);
/* Get a pointer to the module's hardware instance*/
Tc *const tc_module = module_inst->hw;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
/* Write to based on the TC counter_size */
switch (module_inst->counter_size) {
case TC_COUNTER_SIZE_8BIT:
tc_module->COUNT8.COUNT.reg = (uint8_t)count;
return STATUS_OK;
case TC_COUNTER_SIZE_16BIT:
tc_module->COUNT16.COUNT.reg = (uint16_t)count;
return STATUS_OK;
case TC_COUNTER_SIZE_32BIT:
tc_module->COUNT32.COUNT.reg = (uint32_t)count;
return STATUS_OK;
default:
return STATUS_ERR_INVALID_ARG;
}
}
/**
* \brief Get TC module count value.
*
* Retrieves the current count value of a TC module. The specified TC module
* may be started or stopped.
*
* \param[in] module_inst Pointer to the software module instance struct
*
* \return Count value of the specified TC module.
*/
uint32_t tc_get_count_value(
const struct tc_module *const module_inst)
{
/* Sanity check arguments */
Assert(module_inst);
Assert(module_inst->hw);
/* Get a pointer to the module's hardware instance */
Tc *const tc_module = module_inst->hw;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
/* Read from based on the TC counter size */
switch (module_inst->counter_size) {
case TC_COUNTER_SIZE_8BIT:
return (uint32_t)tc_module->COUNT8.COUNT.reg;
case TC_COUNTER_SIZE_16BIT:
return (uint32_t)tc_module->COUNT16.COUNT.reg;
case TC_COUNTER_SIZE_32BIT:
return tc_module->COUNT32.COUNT.reg;
}
Assert(false);
return 0;
}
/**
* \brief Gets the TC module capture value.
*
* Retrieves the capture value in the indicated TC module capture channel.
*
* \param[in] module_inst Pointer to the software module instance struct
* \param[in] channel_index Index of the Compare Capture channel to read
*
* \return Capture value stored in the specified timer channel.
*/
uint32_t tc_get_capture_value(
const struct tc_module *const module_inst,
const enum tc_compare_capture_channel channel_index)
{
/* Sanity check arguments */
Assert(module_inst);
Assert(module_inst->hw);
/* Get a pointer to the module's hardware instance */
Tc *const tc_module = module_inst->hw;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
/* Read out based on the TC counter size */
switch (module_inst->counter_size) {
case TC_COUNTER_SIZE_8BIT:
if (channel_index <
NUMBER_OF_COMPARE_CAPTURE_CHANNELS) {
return tc_module->COUNT8.CC[channel_index].reg;
}
case TC_COUNTER_SIZE_16BIT:
if (channel_index <
NUMBER_OF_COMPARE_CAPTURE_CHANNELS) {
return tc_module->COUNT16.CC[channel_index].reg;
}
case TC_COUNTER_SIZE_32BIT:
if (channel_index <
NUMBER_OF_COMPARE_CAPTURE_CHANNELS) {
return tc_module->COUNT32.CC[channel_index].reg;
}
}
Assert(false);
return 0;
}
/**
* \brief Sets a TC module compare value.
*
* Writes a compare value to the given TC module compare/capture channel.
*
* \param[in] module_inst Pointer to the software module instance struct
* \param[in] channel_index Index of the compare channel to write to
* \param[in] compare New compare value to set
*
* \return Status of the compare update procedure.
*
* \retval STATUS_OK The compare value was updated successfully
* \retval STATUS_ERR_INVALID_ARG An invalid channel index was supplied
*/
enum status_code tc_set_compare_value(
const struct tc_module *const module_inst,
const enum tc_compare_capture_channel channel_index,
const uint32_t compare)
{
/* Sanity check arguments */
Assert(module_inst);
Assert(module_inst->hw);
/* Get a pointer to the module's hardware instance */
Tc *const tc_module = module_inst->hw;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
/* Read out based on the TC counter size */
switch (module_inst->counter_size) {
case TC_COUNTER_SIZE_8BIT:
if (channel_index <
NUMBER_OF_COMPARE_CAPTURE_CHANNELS) {
tc_module->COUNT8.CC[channel_index].reg =
(uint8_t)compare;
return STATUS_OK;
}
case TC_COUNTER_SIZE_16BIT:
if (channel_index <
NUMBER_OF_COMPARE_CAPTURE_CHANNELS) {
tc_module->COUNT16.CC[channel_index].reg =
(uint16_t)compare;
return STATUS_OK;
}
case TC_COUNTER_SIZE_32BIT:
if (channel_index <
NUMBER_OF_COMPARE_CAPTURE_CHANNELS) {
tc_module->COUNT32.CC[channel_index].reg =
(uint32_t)compare;
return STATUS_OK;
}
}
return STATUS_ERR_INVALID_ARG;
}
/**
* \brief Resets the TC module.
*
* Resets the TC module, restoring all hardware module registers to their
* default values and disabling the module. The TC module will not be
* accessible while the reset is being performed.
*
* \note When resetting a 32-bit counter only the master TC module's instance
* structure should be passed to the function.
*
* \param[in] module_inst Pointer to the software module instance struct
*
* \return Status of the procedure.
* \retval STATUS_OK The module was reset successfully
* \retval STATUS_ERR_UNSUPPORTED_DEV A 32-bit slave TC module was passed to
* the function. Only use reset on master
* TC
*/
enum status_code tc_reset(
const struct tc_module *const module_inst)
{
/* Sanity check arguments */
Assert(module_inst);
Assert(module_inst->hw);
/* Get a pointer to the module hardware instance */
TcCount8 *const tc_module = &(module_inst->hw->COUNT8);
if (tc_module->STATUS.reg & TC_STATUS_SLAVE) {
return STATUS_ERR_UNSUPPORTED_DEV;
}
/* Disable this module if it is running */
if (tc_module->CTRLA.reg & TC_CTRLA_ENABLE) {
tc_disable(module_inst);
while (tc_is_syncing(module_inst)) {
/* wait while module is disabling */
}
}
/* Reset this TC module */
tc_module->CTRLA.reg |= TC_CTRLA_SWRST;
return STATUS_OK;
}
/**
* \brief Set the timer TOP/period value.
*
* For 8-bit counter size this function writes the top value to the period
* register.
*
* For 16- and 32-bit counter size this function writes the top value to
* Capture Compare register 0. The value in this register can not be used for
* any other purpose.
*
* \note This function is designed to be used in PWM or frequency
* match modes only, when the counter is set to 16- or 32-bit counter
* size. In 8-bit counter size it will always be possible to change the
* top value even in normal mode.
*
* \param[in] module_inst Pointer to the software module instance struct
* \param[in] top_value New timer TOP value to set
*
* \return Status of the TOP set procedure.
*
* \retval STATUS_OK The timer TOP value was updated successfully
* \retval STATUS_ERR_INVALID_ARG The configured TC module counter size in the
* module instance is invalid
*/
enum status_code tc_set_top_value (
const struct tc_module *const module_inst,
const uint32_t top_value)
{
Assert(module_inst);
Assert(module_inst->hw);
Assert(top_value);
Tc *const tc_module = module_inst->hw;
while (tc_is_syncing(module_inst)) {
/* Wait for sync */
}
switch (module_inst->counter_size) {
case TC_COUNTER_SIZE_8BIT:
tc_module->COUNT8.PER.reg = (uint8_t)top_value;
return STATUS_OK;
case TC_COUNTER_SIZE_16BIT:
tc_module->COUNT16.CC[0].reg = (uint16_t)top_value;
return STATUS_OK;
case TC_COUNTER_SIZE_32BIT:
tc_module->COUNT32.CC[0].reg = (uint32_t)top_value;
return STATUS_OK;
default:
Assert(false);
return STATUS_ERR_INVALID_ARG;
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 126 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 53 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,245 @@
/**
* \file
*
* \brief SAM TCC - Timer Counter for Control Applications Callback Driver
*
* Copyright (C) 2013-2016 Atmel Corporation. All rights reserved.
*
* \asf_license_start
*
* \page License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of Atmel may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* 4. This software may only be redistributed and used in connection with an
* Atmel microcontroller product.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* \asf_license_stop
*
*/
/*
* Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
*/
#include "tcc_callback.h"
void *_tcc_instances[TCC_INST_NUM];
void _tcc_interrupt_handler(uint8_t module_index);
const uint32_t _tcc_intflag[TCC_CALLBACK_N] = {
TCC_INTFLAG_OVF,
TCC_INTFLAG_TRG,
TCC_INTFLAG_CNT,
TCC_INTFLAG_ERR,
TCC_INTFLAG_FAULTA,
TCC_INTFLAG_FAULTB,
TCC_INTFLAG_FAULT0,
TCC_INTFLAG_FAULT1,
#define _TCC_INTFLAG_MC(n,dummy) TCC_INTFLAG_MC##n,
/* TCC_INTFLAG_MC0 ~ ... */
MREPEAT(TCC_NUM_CHANNELS, _TCC_INTFLAG_MC, 0)
#undef _TCC_INTFLAG_MC
};
# define _TCC_INTERRUPT_VECT_NUM(n, unused) \
SYSTEM_INTERRUPT_MODULE_TCC##n,
/**
* \internal Get the interrupt vector for the given device instance
*
* \param[in] The TCC module instance number
*
* \return Interrupt vector for of the given TCC module instance.
*/
static enum system_interrupt_vector _tcc_interrupt_get_interrupt_vector(
uint32_t inst_num)
{
static uint8_t tcc_interrupt_vectors[TCC_INST_NUM] = {
MREPEAT(TCC_INST_NUM, _TCC_INTERRUPT_VECT_NUM, 0)
};
return (enum system_interrupt_vector)tcc_interrupt_vectors[inst_num];
}
/**
* \brief Registers a callback
*
* Registers a callback function which is implemented by the user.
*
* \note The callback must be enabled by \ref tcc_enable_callback,
* in order for the interrupt handler to call it when the conditions for the
* callback type is met.
*
* \param[in] module Pointer to TCC software instance struct
* \param[in] callback_func Pointer to callback function
* \param[in] callback_type Callback type given by an enum
*/
enum status_code tcc_register_callback(
struct tcc_module *const module,
tcc_callback_t callback_func,
const enum tcc_callback callback_type)
{
/* Sanity check arguments */
Assert(module);
Assert(callback_func);
/* Register callback function */
module->callback[callback_type] = callback_func;
/* Set the bit corresponding to the callback_type */
module->register_callback_mask |= _tcc_intflag[callback_type];
return STATUS_OK;
}
/**
* \brief Unregisters a callback
*
* Unregisters a callback function implemented by the user. The callback should
* be disabled before it is unregistered.
*
* \param[in] module Pointer to TCC software instance struct
* \param[in] callback_type Callback type given by an enum
*/
enum status_code tcc_unregister_callback(
struct tcc_module *const module,
const enum tcc_callback callback_type)
{
/* Sanity check arguments */
Assert(module);
/* Unregister callback function */
module->callback[callback_type] = NULL;
/* Clear the bit corresponding to the callback_type */
module->register_callback_mask &= ~_tcc_intflag[callback_type];
return STATUS_OK;
}
/**
* \brief Enables callback
*
* Enables the callback function registered by the \ref
* tcc_register_callback. The callback function will be called from the
* interrupt handler when the conditions for the callback type are
* met. This function will also enable the appropriate interrupts.
*
* \param[in] module Pointer to TCC software instance struct
* \param[in] callback_type Callback type given by an enum
*/
void tcc_enable_callback(
struct tcc_module *const module,
const enum tcc_callback callback_type)
{
/* Sanity check arguments */
Assert(module);
Assert(module->hw);
/* Enable interrupts for this TCC module */
system_interrupt_enable(_tcc_interrupt_get_interrupt_vector(
_tcc_get_inst_index(module->hw)));
/* Enable channel or other callbacks */
module->enable_callback_mask |= _tcc_intflag[callback_type];
module->hw->INTENSET.reg = _tcc_intflag[callback_type];
}
/**
* \brief Disables callback
*
* Disables the callback function registered by the \ref
* tcc_register_callback, and the callback will not be called from the
* interrupt routine. The function will also disable the appropriate
* interrupts.
*
* \param[in] module Pointer to TCC software instance struct
* \param[in] callback_type Callback type given by an enum
*/
void tcc_disable_callback(
struct tcc_module *const module,
const enum tcc_callback callback_type)
{
/* Sanity check arguments */
Assert(module);
Assert(module->hw);
/* Disable interrupts for this TCC module */
system_interrupt_disable(_tcc_interrupt_get_interrupt_vector(
_tcc_get_inst_index(module->hw)));
/* Disable channel or other callbacks */
module->enable_callback_mask &= ~_tcc_intflag[callback_type];
module->hw->INTENCLR.reg = _tcc_intflag[callback_type];
}
/**
* \internal ISR handler for TCC
*
* Auto-generate a set of interrupt handlers for each TCC in the device.
*/
#define _TCC_INTERRUPT_HANDLER(n, m) \
void TCC##n##_Handler(void) \
{ \
_tcc_interrupt_handler(n); \
}
MREPEAT(TCC_INST_NUM, _TCC_INTERRUPT_HANDLER, 0)
/**
* \internal Interrupt handler for the TCC module
*
* Handles interrupts as they occur, it will run the callback functions
* that are registered and enabled.
*
* \param[in] module_index ID of the TCC instance calling the interrupt
* handler
*/
void _tcc_interrupt_handler(
uint8_t module_index)
{
int i;
uint32_t interrupt_and_callback_status_mask;
struct tcc_module *module =
(struct tcc_module *)_tcc_instances[module_index];
interrupt_and_callback_status_mask = (module->hw->INTFLAG.reg &
module->register_callback_mask &
module->enable_callback_mask);
/* Check if callback interrupt has occured */
for (i = 0; i < TCC_CALLBACK_N; i ++) {
if (interrupt_and_callback_status_mask & _tcc_intflag[i]) {
/* Invoke the registered and enabled callback function */
(module->callback[i])(module);
/* Clear interrupt flag */
module->hw->INTFLAG.reg = _tcc_intflag[i];
}
}
}

View File

@ -0,0 +1,93 @@
/**
* \file
*
* \brief SAM TCC - Timer Counter for Control Applications Callback Driver
*
* Copyright (C) 2013-2015 Atmel Corporation. All rights reserved.
*
* \asf_license_start
*
* \page License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of Atmel may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* 4. This software may only be redistributed and used in connection with an
* Atmel microcontroller product.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* \asf_license_stop
*
*/
/*
* Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
*/
#ifndef TCC_CALLBACK_H_INCLUDED
#define TCC_CALLBACK_H_INCLUDED
#include "tcc.h"
#include <system_interrupt.h>
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(__DOXYGEN__)
extern void *_tcc_instances[TCC_INST_NUM];
#endif
/**
* \name Callback Management
* {@
*/
enum status_code tcc_register_callback(
struct tcc_module *const module,
tcc_callback_t callback_func,
const enum tcc_callback callback_type);
enum status_code tcc_unregister_callback(
struct tcc_module *const module,
const enum tcc_callback callback_type);
void tcc_enable_callback(
struct tcc_module *const module,
const enum tcc_callback callback_type);
void tcc_disable_callback(
struct tcc_module *const module,
const enum tcc_callback callback_type);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* TCC_CALLBACK_H_INCLUDED */

View File

@ -1,25 +1,54 @@
#include "pins.h"
#include "asf/sam0/drivers/system/system.h"
PIN(PA02, true, ADC_POSITIVE_INPUT_PIN0);
PIN(PB08, true, ADC_POSITIVE_INPUT_PIN8);
PIN(PB09, true, ADC_POSITIVE_INPUT_PIN9);
PIN(PA04, true, ADC_POSITIVE_INPUT_PIN4);
PIN(PA05, true, ADC_POSITIVE_INPUT_PIN5);
PIN(PB02, true, ADC_POSITIVE_INPUT_PIN10);
PIN(PA11, true, ADC_POSITIVE_INPUT_PIN19);
PIN(PA10, true, ADC_POSITIVE_INPUT_PIN18);
PIN(PA14, false, NO_ADC_INPUT);
PIN(PA09, true, ADC_POSITIVE_INPUT_PIN17);
PIN(PA08, true, ADC_POSITIVE_INPUT_PIN16);
PIN(PA15, false, NO_ADC_INPUT);
PIN(PA20, false, NO_ADC_INPUT);
PIN(PA06, true, ADC_POSITIVE_INPUT_PIN6);
PIN(PA07, true, ADC_POSITIVE_INPUT_PIN7);
PIN(PA18, false, NO_ADC_INPUT);
PIN(PA16, false, NO_ADC_INPUT);
PIN(PA19, false, NO_ADC_INPUT);
PIN(PA17, false, NO_ADC_INPUT);
PIN_NO_TIMERS_(PA02, true, ADC_POSITIVE_INPUT_PIN0);
PIN_ONE_TIMER_(PB08, true, ADC_POSITIVE_INPUT_PIN8,
TC4, 0, 0, 0, PIN_PB08E_TC4_WO0, MUX_PB08E_TC4_WO0);
PIN_ONE_TIMER_(PB09, true, ADC_POSITIVE_INPUT_PIN9,
TC4, 0, 1, 1, PIN_PB09E_TC4_WO1, MUX_PB09E_TC4_WO1);
PIN_ONE_TIMER_(PA04, true, ADC_POSITIVE_INPUT_PIN4,
0, TCC0, 0, 0, PIN_PA04E_TCC0_WO0, MUX_PA04E_TCC0_WO0);
PIN_ONE_TIMER_(PA05, true, ADC_POSITIVE_INPUT_PIN5,
0, TCC0, 1, 1, PIN_PA05E_TCC0_WO1, MUX_PA05E_TCC0_WO1);
PIN_NO_TIMERS_(PB02, true, ADC_POSITIVE_INPUT_PIN10);
PIN_TWO_TIMERS(PA11, true, ADC_POSITIVE_INPUT_PIN19,
0, TCC1, 1, 1, PIN_PA11E_TCC1_WO1, MUX_PA11E_TCC1_WO1,
0, TCC0, 3, 3, PIN_PA11F_TCC0_WO3, MUX_PA11F_TCC0_WO3);
PIN_TWO_TIMERS(PA10, true, ADC_POSITIVE_INPUT_PIN18,
0, TCC1, 0, 0, PIN_PA10E_TCC1_WO0, MUX_PA10E_TCC1_WO0,
0, TCC0, 2, 2, PIN_PA10F_TCC0_WO2, MUX_PA10F_TCC0_WO2);
PIN_TWO_TIMERS(PA14, false, NO_ADC_INPUT,
TC3, 0, 0, 0, PIN_PA14E_TC3_WO0, MUX_PA14E_TC3_WO0,
0, TCC0, 0, 4, PIN_PA14F_TCC0_WO4, MUX_PA14F_TCC0_WO4);
PIN_TWO_TIMERS(PA09, true, ADC_POSITIVE_INPUT_PIN17,
0, TCC0, 1, 1, PIN_PA09E_TCC0_WO1, MUX_PA09E_TCC0_WO1,
0, TCC1, 3, 3, PIN_PA09F_TCC1_WO3, MUX_PA09F_TCC1_WO3);
PIN_TWO_TIMERS(PA08, true, ADC_POSITIVE_INPUT_PIN16,
0, TCC0, 0, 0, PIN_PA08E_TCC0_WO0, MUX_PA08E_TCC0_WO0,
0, TCC1, 2, 2, PIN_PA08F_TCC1_WO2, MUX_PA08F_TCC1_WO2);
PIN_TWO_TIMERS(PA15, false, NO_ADC_INPUT,
TC3, 0, 1, 1, PIN_PA15E_TC3_WO1, MUX_PA15E_TC3_WO1,
0, TCC0, 1, 5, PIN_PA15F_TCC0_WO5, MUX_PA15F_TCC0_WO5);
PIN_ONE_TIMER_(PA20, false, NO_ADC_INPUT,
0, TCC0, 2, 6, PIN_PA20F_TCC0_WO6, MUX_PA20F_TCC0_WO6);
PIN_ONE_TIMER_(PA21, false, NO_ADC_INPUT,
0, TCC0, 3, 7, PIN_PA21F_TCC0_WO7, MUX_PA21F_TCC0_WO7);
PIN_ONE_TIMER_(PA06, true, ADC_POSITIVE_INPUT_PIN6,
0, TCC1, 0, 0, PIN_PA06E_TCC1_WO0, MUX_PA06E_TCC1_WO0);
PIN_ONE_TIMER_(PA07, true, ADC_POSITIVE_INPUT_PIN7,
0, TCC1, 1, 1, PIN_PA07E_TCC1_WO1, MUX_PA07E_TCC1_WO1);
PIN_TWO_TIMERS(PA18, false, NO_ADC_INPUT,
TC3, 0, 0, 0, PIN_PA18E_TC3_WO0, MUX_PA18E_TC3_WO0,
0, TCC0, 2, 2, PIN_PA18F_TCC0_WO2, MUX_PA18F_TCC0_WO2);
PIN_TWO_TIMERS(PA16, false, NO_ADC_INPUT,
0, TCC2, 0, 0, PIN_PA16E_TCC2_WO0, MUX_PA16E_TCC2_WO0,
0, TCC0, 2, 6, PIN_PA16F_TCC0_WO6, MUX_PA16F_TCC0_WO6);
PIN_TWO_TIMERS(PA19, false, NO_ADC_INPUT,
TC3, 0, 1, 1, PIN_PA19E_TC3_WO1, MUX_PA19E_TC3_WO1,
0, TCC0, 3, 3, PIN_PA19F_TCC0_WO3, MUX_PA19F_TCC0_WO3);
PIN_TWO_TIMERS(PA17, false, NO_ADC_INPUT,
0, TCC2, 1, 1, PIN_PA17E_TCC2_WO1, MUX_PA17E_TCC2_WO1,
0, TCC0, 3, 7, PIN_PA17F_TCC0_WO7, MUX_PA17F_TCC0_WO7);
STATIC const mp_map_elem_t pin_cpu_pins_locals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA02), (mp_obj_t)&pin_PA02 },
@ -35,6 +64,7 @@ STATIC const mp_map_elem_t pin_cpu_pins_locals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA08), (mp_obj_t)&pin_PA08 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA15), (mp_obj_t)&pin_PA15 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA20), (mp_obj_t)&pin_PA20 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA21), (mp_obj_t)&pin_PA21 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA06), (mp_obj_t)&pin_PA06 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA07), (mp_obj_t)&pin_PA07 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA18), (mp_obj_t)&pin_PA18 },
@ -58,6 +88,7 @@ STATIC const mp_map_elem_t pin_board_pins_locals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_D4), (mp_obj_t)&pin_PA08 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D5), (mp_obj_t)&pin_PA15 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D6), (mp_obj_t)&pin_PA20 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D7), (mp_obj_t)&pin_PA21 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D8), (mp_obj_t)&pin_PA06 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D9), (mp_obj_t)&pin_PA07 },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D10), (mp_obj_t)&pin_PA18 },

View File

@ -1,26 +1,56 @@
#include "pins.h"
#include "asf/sam0/drivers/system/system.h"
PIN(PA02, true, ADC_POSITIVE_INPUT_PIN0);
PIN(PB08, true, ADC_POSITIVE_INPUT_PIN8);
PIN(PB09, true, ADC_POSITIVE_INPUT_PIN9);
PIN(PA04, true, ADC_POSITIVE_INPUT_PIN4);
PIN(PA05, true, ADC_POSITIVE_INPUT_PIN5);
PIN(PB02, true, ADC_POSITIVE_INPUT_PIN10);
PIN(PB11, false, NO_ADC_INPUT);
PIN(PB10, false, NO_ADC_INPUT);
PIN(PA12, false, NO_ADC_INPUT);
PIN(PA11, true, ADC_POSITIVE_INPUT_PIN19);
PIN(PA10, true, ADC_POSITIVE_INPUT_PIN18);
PIN(PA22, false, NO_ADC_INPUT);
PIN(PA23, false, NO_ADC_INPUT);
PIN(PA15, false, NO_ADC_INPUT);
PIN(PA20, false, NO_ADC_INPUT);
PIN(PA07, true, ADC_POSITIVE_INPUT_PIN7);
PIN(PA18, false, NO_ADC_INPUT);
PIN(PA16, false, NO_ADC_INPUT);
PIN(PA19, false, NO_ADC_INPUT);
PIN(PA17, false, NO_ADC_INPUT);
PIN_NO_TIMERS_(PA02, true, ADC_POSITIVE_INPUT_PIN0);
PIN_ONE_TIMER_(PB08, true, ADC_POSITIVE_INPUT_PIN8,
TC4, 0, 0, 0, PIN_PB08E_TC4_WO0, MUX_PB08E_TC4_WO0);
PIN_ONE_TIMER_(PB09, true, ADC_POSITIVE_INPUT_PIN9,
TC4, 0, 1, 1, PIN_PB09E_TC4_WO1, MUX_PB09E_TC4_WO1);
PIN_ONE_TIMER_(PA04, true, ADC_POSITIVE_INPUT_PIN4,
0, TCC0, 0, 0, PIN_PA04E_TCC0_WO0, MUX_PA04E_TCC0_WO0);
PIN_ONE_TIMER_(PA05, true, ADC_POSITIVE_INPUT_PIN5,
0, TCC0, 1, 1, PIN_PA05E_TCC0_WO1, MUX_PA05E_TCC0_WO1);
PIN_NO_TIMERS_(PB02, true, ADC_POSITIVE_INPUT_PIN10);
PIN_TWO_TIMERS(PB11, false, NO_ADC_INPUT,
TC5, 0, 1, 1, PIN_PB11E_TC5_WO1, MUX_PB11E_TC5_WO1,
0, TCC0, 1, 5, PIN_PB11F_TCC0_WO5, MUX_PB11F_TCC0_WO5);
PIN_TWO_TIMERS(PB10, false, NO_ADC_INPUT,
TC5, 0, 0, 0, PIN_PB10E_TC5_WO0, MUX_PB10E_TC5_WO0,
0, TCC0, 0, 4, PIN_PB10F_TCC0_WO4, MUX_PB10F_TCC0_WO4);
PIN_TWO_TIMERS(PA12, false, NO_ADC_INPUT,
0, TCC2, 0, 0, PIN_PA12E_TCC2_WO0, MUX_PA12E_TCC2_WO0,
0, TCC0, 2, 6, PIN_PA12F_TCC0_WO6, MUX_PA12F_TCC0_WO6);
PIN_TWO_TIMERS(PA11, true, ADC_POSITIVE_INPUT_PIN19,
0, TCC1, 1, 1, PIN_PA11E_TCC1_WO1, MUX_PA11E_TCC1_WO1,
0, TCC0, 3, 3, PIN_PA11F_TCC0_WO3, MUX_PA11F_TCC0_WO3);
PIN_TWO_TIMERS(PA10, true, ADC_POSITIVE_INPUT_PIN18,
0, TCC1, 0, 0, PIN_PA10E_TCC1_WO0, MUX_PA10E_TCC1_WO0,
0, TCC0, 2, 2, PIN_PA10F_TCC0_WO2, MUX_PA10F_TCC0_WO2);
PIN_TWO_TIMERS(PA22, false, NO_ADC_INPUT,
TC4, 0, 0, 0, PIN_PA22E_TC4_WO0, MUX_PA22E_TC4_WO0,
0, TCC0, 0, 4, PIN_PA22F_TCC0_WO4, MUX_PA22F_TCC0_WO4);
PIN_TWO_TIMERS(PA23, false, NO_ADC_INPUT,
TC4, 0, 1, 1, PIN_PA23E_TC4_WO1, MUX_PA23E_TC4_WO1,
0, TCC0, 1, 5, PIN_PA23F_TCC0_WO5, MUX_PA23F_TCC0_WO5);
PIN_TWO_TIMERS(PA15, false, NO_ADC_INPUT,
TC3, 0, 1, 1, PIN_PA15E_TC3_WO1, MUX_PA15E_TC3_WO1,
0, TCC0, 1, 5, PIN_PA15F_TCC0_WO5, MUX_PA15F_TCC0_WO5);
PIN_ONE_TIMER_(PA20, false, NO_ADC_INPUT,
0, TCC0, 2, 6, PIN_PA20F_TCC0_WO6, MUX_PA20F_TCC0_WO6);
PIN_ONE_TIMER_(PA07, true, ADC_POSITIVE_INPUT_PIN7,
0, TCC1, 1, 1, PIN_PA07E_TCC1_WO1, MUX_PA07E_TCC1_WO1);
PIN_TWO_TIMERS(PA18, false, NO_ADC_INPUT,
TC3, 0, 0, 0, PIN_PA18E_TC3_WO0, MUX_PA18E_TC3_WO0,
0, TCC0, 2, 2, PIN_PA18F_TCC0_WO2, MUX_PA18F_TCC0_WO2);
PIN_TWO_TIMERS(PA16, false, NO_ADC_INPUT,
0, TCC2, 0, 0, PIN_PA16E_TCC2_WO0, MUX_PA16E_TCC2_WO0,
0, TCC0, 2, 6, PIN_PA16F_TCC0_WO6, MUX_PA16F_TCC0_WO6);
PIN_TWO_TIMERS(PA19, false, NO_ADC_INPUT,
TC3, 0, 1, 1, PIN_PA19E_TC3_WO1, MUX_PA19E_TC3_WO1,
0, TCC0, 3, 3, PIN_PA19F_TCC0_WO3, MUX_PA19F_TCC0_WO3);
PIN_TWO_TIMERS(PA17, false, NO_ADC_INPUT,
0, TCC2, 1, 1, PIN_PA17E_TCC2_WO1, MUX_PA17E_TCC2_WO1,
0, TCC0, 3, 7, PIN_PA17F_TCC0_WO7, MUX_PA17F_TCC0_WO7);
STATIC const mp_map_elem_t pin_cpu_pins_locals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_PA02), (mp_obj_t)&pin_PA02 },

View File

@ -34,6 +34,7 @@
#include "modmachine_adc.h"
#include "modmachine_dac.h"
#include "modmachine_pin.h"
#include "modmachine_pwm.h"
#if MICROPY_PY_MACHINE
@ -42,6 +43,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_ADC), MP_ROM_PTR(&adc_type) },
{ MP_ROM_QSTR(MP_QSTR_DAC), MP_ROM_PTR(&dac_type) },
{ MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&pin_type) },
{ MP_ROM_QSTR(MP_QSTR_PWM), MP_ROM_PTR(&pwm_type) },
};
STATIC MP_DEFINE_CONST_DICT(machine_module_globals, machine_module_globals_table);

View File

@ -35,27 +35,68 @@
#include "asf/sam0/drivers/adc/adc_sam_d_r/adc_feature.h"
// This macro is used to simplify pin definition in boards/<board>/pins.c
#define PIN(p_name, p_has_adc, p_adc_input) \
#define PIN_TWO_TIMERS(p_name, p_has_adc, p_adc_input, p_primary_tc, p_primary_tcc, \
p_primary_channel, p_primary_wave_output, p_primary_pin, p_primary_mux, \
p_secondary_tc, p_secondary_tcc, p_secondary_channel, p_secondary_wave_output, \
p_secondary_pin, p_secondary_mux) \
const pin_obj_t pin_## p_name = { \
{ &pin_type }, \
.name = MP_QSTR_ ## p_name, \
.pin = (PIN_## p_name), \
.has_adc = p_has_adc, \
.adc_input = p_adc_input, \
.primary_timer = { \
.tc = p_primary_tc, \
.tcc = p_primary_tcc, \
.channel = p_primary_channel, \
.wave_output = p_primary_wave_output, \
.pin = p_primary_pin, \
.mux = p_primary_mux \
}, \
.secondary_timer = { \
.tc = p_secondary_tc, \
.tcc = p_secondary_tcc, \
.channel = p_secondary_channel, \
.wave_output = p_secondary_wave_output, \
.pin = p_secondary_pin, \
.mux = p_secondary_mux \
} \
}
#define PIN_NO_TIMERS_(p_name, p_has_adc, p_adc_input) \
PIN_TWO_TIMERS(p_name, p_has_adc, p_adc_input, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
#define PIN_ONE_TIMER_(p_name, p_has_adc, p_adc_input, p_primary_tcc, \
p_primary_tc, p_primary_channel, p_primary_wave_output, \
p_primary_pin, p_primary_mux) \
PIN_TWO_TIMERS(p_name, p_has_adc, p_adc_input, p_primary_tcc, p_primary_tc, \
p_primary_channel, p_primary_wave_output, p_primary_pin, p_primary_mux, \
0, 0, 0, 0, 0, 0)
#define NO_ADC_INPUT (0)
#include "mpconfigport.h"
#include "py/obj.h"
typedef struct {
Tc *const tc;
Tcc *const tcc;
uint8_t channel;
uint8_t wave_output;
uint32_t pin;
uint32_t mux;
} pin_timer_t;
typedef struct {
mp_obj_base_t base;
qstr name;
uint32_t pin;
bool has_adc;
enum adc_positive_input adc_input;
pin_timer_t primary_timer;
pin_timer_t secondary_timer;
} pin_obj_t;
extern const mp_obj_type_t pin_type;

192
atmel-samd/modmachine_pwm.c Normal file
View File

@ -0,0 +1,192 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2016 Damien P. George
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <stdio.h>
#include <stdint.h>
#include "py/runtime.h"
#include "modmachine_pin.h"
#include "modmachine_pwm.h"
#include "asf/sam0/drivers/tc/tc.h"
#include "asf/sam0/drivers/tcc/tcc.h"
typedef struct _pwm_obj_t {
mp_obj_base_t base;
const pin_obj_t *pin;
bool using_primary_timer;
struct tc_module tc_instance;
struct tcc_module tcc_instance;
} pwm_obj_t;
/******************************************************************************/
// MicroPython bindings for PWM
STATIC void pwm_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
pwm_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_printf(print, "PWM(%s", self->pin->name);
mp_printf(print, ", freq=%u, duty=%u", 0, 0);
mp_printf(print, ")");
}
/// \classmethod \constructor(pin)
/// Create a PWM object associated with the given pin. This allows you to write PWM
/// signals out on the given pin. Frequency is currently fixed at ~735Hz like Arduino.
STATIC mp_obj_t pwm_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
mp_obj_t pin_obj = args[0];
const pin_obj_t *pin = pin_find(pin_obj);
// create PWM object from the given pin
pwm_obj_t *self = m_new_obj(pwm_obj_t);
self->base.type = &pwm_type;
self->pin = pin;
self->using_primary_timer = true;
mp_map_t kw_args;
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
enum { ARG_duty };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_duty, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
};
mp_arg_val_t parsed_args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args - 1, args + 1, &kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, parsed_args);
if (pin->primary_timer.tc == 0 && pin->primary_timer.tcc == 0 &&
pin->secondary_timer.tc == 0 && pin->secondary_timer.tcc == 0) {
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError,
"PWM not supported on pin %q", self->pin->name));
}
if (parsed_args[ARG_duty].u_int < 0 || parsed_args[ARG_duty].u_int > 255) {
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError,
"PWM duty must be between 0 and 255 (8 bit resolution), not %d",
parsed_args[ARG_duty].u_int));
}
uint8_t duty = parsed_args[ARG_duty].u_int;
// TODO(tannewt): Support output on multiple timer channels at once.
const pin_timer_t* t = &pin->primary_timer;
if (t->tcc != 0) {
struct tcc_config config_tcc;
tcc_get_config_defaults(&config_tcc, t->tcc);
config_tcc.counter.clock_prescaler = TCC_CLOCK_PRESCALER_DIV256;
config_tcc.counter.period = 0xFF;
config_tcc.compare.wave_generation = TCC_WAVE_GENERATION_SINGLE_SLOPE_PWM;
config_tcc.compare.match[t->channel] = duty;
config_tcc.pins.enable_wave_out_pin[t->wave_output] = true;
config_tcc.pins.wave_out_pin[t->wave_output] = t->pin;
config_tcc.pins.wave_out_pin_mux[t->wave_output] = t->mux;
tcc_init(&self->tcc_instance, t->tcc, &config_tcc);
tcc_enable(&self->tcc_instance);
} else {
struct tc_config config_tc;
tc_get_config_defaults(&config_tc);
config_tc.counter_size = TC_COUNTER_SIZE_8BIT;
config_tc.wave_generation = TC_WAVE_GENERATION_NORMAL_PWM;
config_tc.clock_prescaler = TC_CLOCK_PRESCALER_DIV256;
config_tc.counter_8_bit.period = 0xff;
config_tc.counter_8_bit.compare_capture_channel[t->channel] = duty;
config_tc.pwm_channel[t->wave_output].enabled = true;
config_tc.pwm_channel[t->wave_output].pin_out = t->pin;
config_tc.pwm_channel[t->wave_output].pin_mux = t->mux;
tc_init(&self->tc_instance, t->tc, &config_tc);
tc_enable(&self->tc_instance);
}
return MP_OBJ_FROM_PTR(self);
}
STATIC mp_obj_t pwm_del(mp_obj_t self_in) {
pwm_obj_t *self = MP_OBJ_TO_PTR(self_in);
const pin_timer_t* t = &self->pin->primary_timer;
if (!self->using_primary_timer) {
t = &self->pin->secondary_timer;
}
if (t->tcc != 0) {
tcc_disable(&self->tcc_instance);
} else {
tc_disable(&self->tc_instance);
}
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pwm_del_obj, pwm_del);
// 8 bit resolution
STATIC mp_obj_t pwm_duty(size_t n_args, const mp_obj_t *args) {
pwm_obj_t *self = MP_OBJ_TO_PTR(args[0]);
const pin_timer_t* t = &self->pin->primary_timer;
if (!self->using_primary_timer) {
t = &self->pin->secondary_timer;
}
if (n_args == 1) {
uint8_t duty;
if (t->tcc != 0) {
duty = tcc_get_capture_value(&self->tcc_instance, t->channel);
} else {
duty = tc_get_capture_value(&self->tc_instance, t->channel);
}
return MP_OBJ_NEW_SMALL_INT(duty);
} else {
mp_int_t duty = mp_obj_get_int(args[1]);
if (duty < 0 || duty > 255) {
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError,
"PWM duty must be between 0 and 255 (8 bit resolution), not %d",
duty));
}
if (t->tcc != 0) {
tcc_set_compare_value(&self->tcc_instance, t->channel, duty);
} else {
tc_set_compare_value(&self->tc_instance, t->channel, duty);
}
return mp_const_none;
}
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pwm_duty_obj, 1, 2, pwm_duty);
STATIC const mp_rom_map_elem_t pwm_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&pwm_del_obj) },
{ MP_ROM_QSTR(MP_QSTR_duty), MP_ROM_PTR(&pwm_duty_obj) },
};
STATIC MP_DEFINE_CONST_DICT(pwm_locals_dict, pwm_locals_dict_table);
const mp_obj_type_t pwm_type = {
{ &mp_type_type },
.name = MP_QSTR_PWM,
.print = pwm_print,
.make_new = pwm_make_new,
.locals_dict = (mp_obj_dict_t*)&pwm_locals_dict,
};

View File

@ -0,0 +1,27 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2013, 2014 Damien P. George
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
extern const mp_obj_type_t pwm_type;