Compare commits
1526 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 366ad20dfe | |||
| f1649d7846 | |||
| f1ec785f06 | |||
| 0e57b93612 | |||
| e81a1c7044 | |||
| f1e187a5dd | |||
| 4072f5bfb7 | |||
| 2808b3be84 | |||
| 5a620276ae | |||
| 3331de15be | |||
| 16fd59f130 | |||
| 7d6c4bfa5e | |||
| 4d2c30e2a8 | |||
| b3e7af57ad | |||
| 9934d0e88c | |||
| 0904be9100 | |||
| 14fcaa02dc | |||
| f36ffdf741 | |||
| d594c81515 | |||
| d6f3615a84 | |||
| d9f899622f | |||
| 1999e89659 | |||
| a38f9c9dc9 | |||
| e189562dfe | |||
| 44337ce5a5 | |||
| 2b50fafc2a | |||
| ae025bcb67 | |||
| b128797198 | |||
| 0a301d5ea7 | |||
| a11e82f828 | |||
| 48b918ef2c | |||
| a85ba9ab3f | |||
| 335140e621 | |||
| 149c483db2 | |||
| b22a302a72 | |||
| 8972ae62c7 | |||
| edb3e840b1 | |||
| 03580ae173 | |||
| 4910c6256c | |||
| 0b3d8553ab | |||
| 092fb5dc09 | |||
| c6a30f7eef | |||
| e83ae2d3f3 | |||
| cb521c3f54 | |||
| 9930b72421 | |||
| 0dff845241 | |||
| e26c77a509 | |||
| 64372d6e03 | |||
| 5def332bf1 | |||
| 90adb07d7d | |||
| 6df3cf22ad | |||
| 2a9067b033 | |||
| 781c3140b5 | |||
| e3d852be66 | |||
| f98fbf637d | |||
| 0d2f7ff289 | |||
| 8136c0f82a | |||
| 6156173b82 | |||
| 96d2784564 | |||
| ff697a7c34 | |||
| ec21c8fc9e | |||
| 4d09457891 | |||
| 22571797d2 | |||
| 88b2a6004a | |||
| cbd5dda826 | |||
| 795c7fb0e0 | |||
| f6f04c0e10 | |||
| 37fb804933 | |||
| 6a8ecf3a69 | |||
| 688efa881f | |||
| d407c5a91a | |||
| 1b677713e9 | |||
| 4f337e8735 | |||
| 81e765e1e9 | |||
| 7410d24f1f | |||
| 694620dd67 | |||
| be805a8132 | |||
| 5400f6ecf8 | |||
| 8022669a04 | |||
| 66a55a5eb4 | |||
| 04fad1c5f4 | |||
| 6ca0865cad | |||
| a1a8d19a9d | |||
| e2ba0def50 | |||
| afd0b532ad | |||
| 1cb2de37de | |||
| fd94570a0d | |||
| b120adf8df | |||
| 1cfe6d7478 | |||
| a9b30acbe6 | |||
| b9e4ce3715 | |||
| 78410b210b | |||
| de0b872a24 | |||
| ae24f4f930 | |||
| f093ce35a0 | |||
| 7ee1ab4fd3 | |||
| bb352f9836 | |||
| 5c120222a4 | |||
| b3af5a1ac0 | |||
| 124cff0dbe | |||
| 9076a9314f | |||
| 40ce9d0299 | |||
| 20f1688376 | |||
| 59e8707a4f | |||
| 5735c8af5b | |||
| c97bf04166 | |||
| 156bd28160 | |||
| 1f991f07be | |||
| 675be8db7c | |||
| fcb19823db | |||
| e8779e7fe2 | |||
| ac5ff1d802 | |||
| 08e20dbbc6 | |||
| 1682036533 | |||
| 42180e25a3 | |||
| c6e4fbe162 | |||
| 65adea6240 | |||
| 888da29b61 | |||
| 50ff4cf157 | |||
| 12b9bbaa50 | |||
| b50afa9897 | |||
| a556a8c506 | |||
| ee7b6a5e68 | |||
| da9f3868d5 | |||
| 04183da302 | |||
| 0b9f99f940 | |||
| 5aff43e65e | |||
| 32b6a3ad12 | |||
| 94857b59c9 | |||
| 3c5f0ce858 | |||
| 0d7c559139 | |||
| 542baea2e1 | |||
| 33ddd4e929 | |||
| 96c1721eeb | |||
| 80c51ea572 | |||
| f71e65aa9c | |||
| 1025066ab1 | |||
| f4a7531ccb | |||
| 3e53754ccf | |||
| 99cbeb3806 | |||
| 751de314a4 | |||
| 689ae467f2 | |||
| b06fc3b539 | |||
| 3ca3268241 | |||
| 382aa96870 | |||
| 522ea178a4 | |||
| 2756a1d411 | |||
| 94b8eac6d0 | |||
| b4ddee8beb | |||
| f0494b4021 | |||
| ba8d03d241 | |||
| 37927f9274 | |||
| 81b9914704 | |||
| d86efae37c | |||
| 3550494db1 | |||
| 95d19cfcbf | |||
| e5e5c1513d | |||
| 083bfa3fe9 | |||
| 8f5d99a2ab | |||
| f748b1a1ce | |||
| e931bc7e72 | |||
| b95a1b94cb | |||
| 3bdca8730e | |||
| cb02b6ec60 | |||
| d70a4646f4 | |||
| 11bbcfd69e | |||
| d429d5a4ae | |||
| c6d99c772b | |||
| 8898eb20a6 | |||
| 53b6c74f0f | |||
| 5c90a5bbf5 | |||
| baae6ddfef | |||
| c941fe470b | |||
| 21f5ca6ad4 | |||
| ad3b95c8ea | |||
| 50cc55d172 | |||
| 3eb55016e4 | |||
| 51004e003d | |||
| 0764981aa1 | |||
| b19d8182c1 | |||
| 6b50a50676 | |||
| 29c9c723f8 | |||
| b49da0c4ba | |||
| 58bd2a5e81 | |||
| 6f176d1d64 | |||
| 38c97dc975 | |||
| d7ec13ce69 | |||
| 7e585cab83 | |||
| e76545c450 | |||
| 1894b981af | |||
| 61f9e28c23 | |||
| c6ecfc1429 | |||
| 4cc2bc1343 | |||
| dcb8af0518 | |||
| 4108382c2c | |||
| 0c1be965b6 | |||
| 6f87e4b4dc | |||
| c91b3142aa | |||
| df6becfb07 | |||
| 51aa9743a6 | |||
| e561ecb5a7 | |||
| 38ed5f5ee9 | |||
| 23618d9cd0 | |||
| 8cf6ef8411 | |||
| fa3c14fccf | |||
| 773d773baa | |||
| 5c186f7dd3 | |||
| 77b75ce86c | |||
| 6f156d01d9 | |||
| c0f6eebded | |||
| 6786101c64 | |||
| ee21f44969 | |||
| 090e08ef3d | |||
| b1990d3e39 | |||
| 20c027464e | |||
| d7c8491a07 | |||
| 2a18869b50 | |||
| 444b6d6d83 | |||
| f1dfc80332 | |||
| 6137b671fe | |||
| 0858670828 | |||
| 0ab3f7e985 | |||
| 022eb85937 | |||
| 31261d0c17 | |||
| 85d57f7a9e | |||
| 8a159dfec2 | |||
| d59ed4dce0 | |||
| 110e631656 | |||
| 9769d799df | |||
| a783caabac | |||
| b978153ca4 | |||
| 090d72f591 | |||
| e3c2d43b2b | |||
| 5274ab0ad5 | |||
| 59d9886473 | |||
| 6e30d1bef1 | |||
| db81a1d4a2 | |||
| 2edc13a0e2 | |||
| 8db9b800e7 | |||
| 21971f2f7a | |||
| b2265869b2 | |||
| f408863043 | |||
| 336131fb37 | |||
| 808d6f367b | |||
| 00d03c6dc5 | |||
| 4f660a18bc | |||
| e87ae5b643 | |||
| 73fe8ef4df | |||
| 157d28c418 | |||
| e143b1252f | |||
| 816fa9e2b4 | |||
| 661a38586b | |||
| 4d297dd562 | |||
| 56b5fb5e15 | |||
| 2205c7775b | |||
| b637b80a9a | |||
| 19440df4d0 | |||
| 6f8717ce12 | |||
| 6ec2cbce18 | |||
| f6bf247302 | |||
| 4b36a0a3dc | |||
| be0afd71df | |||
| 8e35029f10 | |||
| 0aa833fe6c | |||
| 08b09f7a4c | |||
| 151962baf2 | |||
| aca2bbbc50 | |||
| 211544b543 | |||
| 8e36d00ad0 | |||
| e596931aac | |||
| ed949cc5c1 | |||
| 53757444c5 | |||
| c46d47f45f | |||
| bc2fc86993 | |||
| 01e100360f | |||
| dba26a6d1f | |||
| 05fc3d7891 | |||
| 7ff70d7adb | |||
| a7e142460c | |||
| 9d2ef95f1d | |||
| de5f69b285 | |||
| 829281d016 | |||
| be098cd42f | |||
| 2dafc10da3 | |||
| 6444ef02e4 | |||
| ab5232c37b | |||
| 6b150bfc40 | |||
| 885ad70c8b | |||
| d37cfa327e | |||
| 040ebd1675 | |||
| 48fa0e6de0 | |||
| c9aa7486ce | |||
| 80b3f8c395 | |||
| 712b213b40 | |||
| 52750bf362 | |||
| 0afdec882c | |||
| 29b048810c | |||
| 0eb1830d85 | |||
| f5c980f9cf | |||
| d36e950547 | |||
| df75e9d692 | |||
| 86c3be7089 | |||
| 575b099e40 | |||
| 360166f626 | |||
| b5f1a4141c | |||
| 0401f4ce14 | |||
| 9f3b4d537d | |||
| deefd2defa | |||
| 1e31b56b0f | |||
| 86e58df324 | |||
| 3edf9904f4 | |||
| 8f461568e0 | |||
| e848bebb10 | |||
| f84f7e5a38 | |||
| 677bd19dbf | |||
| dc05d7fc2b | |||
| 2894d8b18e | |||
| bfdd14be4f | |||
| 941e9bd329 | |||
| e1f8c97b21 | |||
| 71c05f1b57 | |||
| 2c79faede9 | |||
| 94badcbace | |||
| 2746eb589e | |||
| f264228074 | |||
| 994fdb5179 | |||
| 1e41d157a3 | |||
| c57545ee08 | |||
| 647c04def8 | |||
| 9e987e4971 | |||
| ba55602462 | |||
| ec46336df7 | |||
| d57adbb88b | |||
| b24099c9d0 | |||
| 203d3f8f56 | |||
| d9e1cbebea | |||
| e5fbbbc068 | |||
| 4eddcf9142 | |||
| bc01200495 | |||
| c95e3e3bcb | |||
| 105c81217c | |||
| 3911c38d5e | |||
| 80adb124f7 | |||
| 8e783e24e8 | |||
| 8a19bc0c0e | |||
| 312bebff9a | |||
| 4995e0ebfa | |||
| 84bbd018ab | |||
| a03502080e | |||
| 72776f647b | |||
| 4eb4476ce6 | |||
| a66ae52234 | |||
| 68b9503b96 | |||
| cf4e2e507f | |||
| af3500044a | |||
| 5793ca42b5 | |||
| 07b1ac06a9 | |||
| bba2a3b906 | |||
| 80c70f33eb | |||
| d16f443d33 | |||
| f7de05e50c | |||
| c8b2fbd91e | |||
| aef23c9637 | |||
| 7cf2788cc3 | |||
| c294613b53 | |||
| 4dc4d348d4 | |||
| 6146126b2a | |||
| 5492f15633 | |||
| 4d1df2e357 | |||
| 954f03b6a8 | |||
| a560c0f7cd | |||
| ec30e8c9ef | |||
| bc0e977229 | |||
| 1993365967 | |||
| c2ba9a03ee | |||
| 7b2ea8febe | |||
| e38307355e | |||
| 5c81ce2bb8 | |||
| 7f8984b500 | |||
| 062b955f1d | |||
| ccb2a95456 | |||
| 00165699e9 | |||
| cc4148e246 | |||
| dc98ee553f | |||
| 738a8495ad | |||
| 17b4ba7c9c | |||
| 96c54c188a | |||
| e63cb5fe8f | |||
| 4dad8628ff | |||
| 009fd186f8 | |||
| 8c7e98627f | |||
| 656c3c3b2a | |||
| 9ec8762497 | |||
| 39d63b800c | |||
| 33b18dc801 | |||
| 0aa100a31e | |||
| 879b54a8bc | |||
| d1256be7ec | |||
| eb6f44372e | |||
| b0abce5a7e | |||
| 72df10c669 | |||
| b8f1b74abd | |||
| e8fc0e9a57 | |||
| 4b5a42f86a | |||
| 83c83e3127 | |||
| 5ce64f6d16 | |||
| c05c5d96d9 | |||
| cce80fd41c | |||
| 1b79217fbc | |||
| 192507b524 | |||
| 0d13c5d077 | |||
| fd3e243989 | |||
| 12b697c5cd | |||
| 03676d8e2f | |||
| ea6f5e20a6 | |||
| 3c6d2d7711 | |||
| a9392c6b27 | |||
| fa12866de3 | |||
| 9508f9ec75 | |||
| beb7e2ed93 | |||
| f24cdf1081 | |||
| 61be06ef70 | |||
| ba1c2a9819 | |||
| e5e3c3ff35 | |||
| 9c667b5436 | |||
| de8fbdea6d | |||
| 282170a259 | |||
| 31980f01ba | |||
| dcd2fa9291 | |||
| 967d1034d9 | |||
| 179de4423d | |||
| d11ed30584 | |||
| 1381b5d57d | |||
| 63d6dddae1 | |||
| e5d69d313c | |||
| f177da45bb | |||
| 5a1ba9c32f | |||
| dc40b3ec00 | |||
| e7d519c898 | |||
| 2bf1bbf399 | |||
| 2d0d5eccd8 | |||
| 1f77930e01 | |||
| 1ed1882766 | |||
| 4dd612a68d | |||
| dc733192be | |||
| fb9de6e787 | |||
| b935bc948a | |||
| ecddd2a655 | |||
| fa998178e9 | |||
| ed605e77fa | |||
| 73aa7ffff9 | |||
| 50ad30259f | |||
| 8139154243 | |||
| fa3492fc6e | |||
| 536fa07ed5 | |||
| 828dea2ee0 | |||
| 3bae28a5e1 | |||
| 70e9c07b2d | |||
| 55ec7d43ef | |||
| 0b016c08c9 | |||
| 890a396a2a | |||
| b01f10dfac | |||
| f0d8d76f68 | |||
| bc08ce86be | |||
| 081ab35e82 | |||
| eacb8346af | |||
| d77be210c1 | |||
| e98288ecab | |||
| cfc41e5587 | |||
| 36a94ac586 | |||
| 5ad60d89a8 | |||
| bdfeb54a9d | |||
| 1f488292cd | |||
| b6fa55aa37 | |||
| 7450b7c36e | |||
| 3cdd2591ed | |||
| 699b5f5b30 | |||
| 4a30fe1a44 | |||
| 63b13588a8 | |||
| cd4c35c543 | |||
| b86125c6d6 | |||
| 432b72e7a8 | |||
| a6326d25fb | |||
| de26374746 | |||
| d25f0a5a21 | |||
| 951b65c2de | |||
| f7b44ac2a6 | |||
| 803c3169ad | |||
| f151bf8bb7 | |||
| 198b059b44 | |||
| a18d6171a6 | |||
| 8af3c04e7d | |||
| c5fd486e91 | |||
| 03da376104 | |||
| 897170294c | |||
| 2bde53bd46 | |||
| 1eb3364ac9 | |||
| ce5c848284 | |||
| 114e9b0f56 | |||
| 3f56bd91d2 | |||
| ddfddae4f4 | |||
| c776cda9fa | |||
| 9d7a1ae9f5 | |||
| 97a35dd534 | |||
| e3e51a9a8d | |||
| d0720a565f | |||
| 72d5029f42 | |||
| aa380aeb4b | |||
| 1617798287 | |||
| 8f6a5d538f | |||
| c1a1f80fff | |||
| 8488d64062 | |||
| 0977226a4b | |||
| 7dab8ca5dc | |||
| d0c8aabd28 | |||
| 8c22f9fd4f | |||
| 2e3d74f60f | |||
| 2a1162b42c | |||
| 9e3025e07b | |||
| 5299b577d1 | |||
| 47619e4476 | |||
| 6845f17fb2 | |||
| 2aaa1a5815 | |||
| f36da47b85 | |||
| 03da273ea6 | |||
| 1c1d444b0c | |||
| 742733d714 | |||
| 235d024505 | |||
| 921001f004 | |||
| 0d9d11a2d5 | |||
| 113a5fa80e | |||
| 4ea058260b | |||
| 9c65890644 | |||
| e41b2274b0 | |||
| 85162da0df | |||
| d55aaf95e8 | |||
| d6c416bb22 | |||
| 5f6a8588c5 | |||
| 1c95c13224 | |||
| 967076b080 | |||
| 855b188102 | |||
| a1d4835404 | |||
| 6759be43ea | |||
| 6e0001b4f8 | |||
| 84f0ce4751 | |||
| d9e2acd1b2 | |||
| e8f9473be2 | |||
| 126a80ea83 | |||
| aa635fe9f1 | |||
| d473456a08 | |||
| 7761812532 | |||
| 18881e6725 | |||
| 1d78bdac82 | |||
| e1fc89c83f | |||
| 35800eec02 | |||
| 83e093f5cc | |||
| 2b7e5c8e6c | |||
| 3c2f735fb8 | |||
| e3370d097a | |||
| f39b28b6a9 | |||
| b1ec140f0b | |||
| 6e932f979d | |||
| d3dea2e091 | |||
| cc8711419e | |||
| c04f8e8c9d | |||
| 4813938a87 | |||
| 971732b9f6 | |||
| 1997640e41 | |||
| b45a277c52 | |||
| 016bd86c28 | |||
| fc709c28b5 | |||
| 65d69e9507 | |||
| 28e7562e7a | |||
| 2e5a6243df | |||
| d413781b98 | |||
| 50d38e7d03 | |||
| 80784c4d11 | |||
| 8761cb0464 | |||
| aceadabe89 | |||
| 3a1fedaee6 | |||
| a1f0d9d349 | |||
| c67cefd913 | |||
| c71f542d61 | |||
| fe5ba25a00 | |||
| 4ae9afcc56 | |||
| c3ff130127 | |||
| fbf8819253 | |||
| a7ebbe6dcd | |||
| 49909d3cd1 | |||
| ada40af5d6 | |||
| ec045f39aa | |||
| ba4a17f251 | |||
| 12628d43ce | |||
| 023d21a1cf | |||
| a8a64f19f4 | |||
| 529e6ed1ea | |||
| acb4dba7cd | |||
| f508bdded4 | |||
| 20f8c9b950 | |||
| d7e2e655ca | |||
| 15204bd5e9 | |||
| 2ec90d2162 | |||
| b56c6b9e13 | |||
| e4b27c2401 | |||
| 1647db8fad | |||
| c8d3069580 | |||
| b7e245036b | |||
| 66370006bb | |||
| 3fcd131f46 | |||
| 0e7999915d | |||
| e301e28e45 | |||
| 6e4a7e2dcb | |||
| 8fbba6abd9 | |||
| e2fef4df6f | |||
| c93dab2307 | |||
| d89a61bd51 | |||
| 2683b2636b | |||
| 7cb3640ea4 | |||
| dc85b604bb | |||
| aa3292cc57 | |||
| 7e17a2cfd0 | |||
| 0acaaf536d | |||
| 30b08e218d | |||
| 7babfbbcb2 | |||
| 2e7a754ac1 | |||
| 61f3051982 | |||
| 69a5e0c136 | |||
| 73419681dc | |||
| bb155ed38e | |||
| 7aad82cccd | |||
| 18aa682954 | |||
| 5e72729c67 | |||
| 6f1afb411a | |||
| 016171d682 | |||
| f6a73bbd84 | |||
| baaf79b755 | |||
| 2aafc5b7b0 | |||
| 7145731844 | |||
| 1e00ba5433 | |||
| abda89437d | |||
| d6d01f1f8e | |||
| 5a39afb81b | |||
| 8f4c564b04 | |||
| 017e0e6951 | |||
| 7ee87dc2db | |||
| 3a3228ef1b | |||
| 5a53e4d921 | |||
| 8979990805 | |||
| 4e276c6e00 | |||
| 96bcf08477 | |||
| 68cc5c72fd | |||
| 06dff0b7ec | |||
| c4dbedd5b6 | |||
| 9727e5e3d6 | |||
| ad323d852e | |||
| 4300547c66 | |||
| f61ff9c813 | |||
| 55071749b7 | |||
| 9dd8a49f82 | |||
| 36ba754842 | |||
| 169515404d | |||
| 3e838bf6b6 | |||
| b81980a439 | |||
| 98e7b821b4 | |||
| 03f27a5e41 | |||
| cffbb146ea | |||
| 1ddbdd0321 | |||
| 4f04f4e6b8 | |||
| c1a3ec1228 | |||
| bdbd15e6d9 | |||
| 5c2cb60f03 | |||
| f8a8711075 | |||
| b509567567 | |||
| 2c6c9e90df | |||
| 8438a57910 | |||
| a471cd26e1 | |||
| f089bbbc93 | |||
| f3a09768e8 | |||
| 9509568b7e | |||
| 252ae1b52d | |||
| 3137df9ad4 | |||
| 42866db251 | |||
| 50582e3b47 | |||
| 0c6c96bb60 | |||
| 3621f21fb2 | |||
| 3d346f8398 | |||
| 41785a10dd | |||
| ca76c3df7a | |||
| c4f1a191c3 | |||
| 967bf41080 | |||
| 1e4482df54 | |||
| 254417e8b0 | |||
| 80946a17ee | |||
| 1dc6d50dca | |||
| b86dfd35ae | |||
| 6dbeca94b3 | |||
| 527d260581 | |||
| ae2476dfdb | |||
| 91eaa54ea9 | |||
| 1352acdf75 | |||
| 123c6c5d34 | |||
| df320209c3 | |||
| 8da92b6823 | |||
| b708bcf8b1 | |||
| 7b3e28fc77 | |||
| 873fb84d27 | |||
| 7d8f49f82c | |||
| 587e6b7c8d | |||
| f1958ac060 | |||
| 4d2355cc9e | |||
| 0f6f05441b | |||
| ca58084020 | |||
| 89a9aa931f | |||
| e9d374dd54 | |||
| 21bfbb9d44 | |||
| 5054c53901 | |||
| 56d5c5b97a | |||
| ad70d76faa | |||
| 8f787cc474 | |||
| 499248c5ef | |||
| 6e86c9d22b | |||
| 9c3a562208 | |||
| d00eb4da5c | |||
| 5b4e39a429 | |||
| b11e78f5f7 | |||
| 3bdd7b1ed3 | |||
| 14b7c8cf51 | |||
| 68cff5f245 | |||
| 652162777b | |||
| 923f17328f | |||
| f4076fe99d | |||
| 6445859270 | |||
| 4661451d32 | |||
| 22e688460f | |||
| 8bccd0ef5b | |||
| f4639fa964 | |||
| 0a10d010b7 | |||
| 7a056a4e09 | |||
| 33c459c1d6 | |||
| 65c2f3bb65 | |||
| ec9a5b7157 | |||
| 31920a5285 | |||
| b78cccad0f | |||
| 36a1d12238 | |||
| 79183f7620 | |||
| b0f148f7db | |||
| bc4fa3984b | |||
| d60e5c89d8 | |||
| 57d68e0d01 | |||
| 908d487212 | |||
| a855d01336 | |||
| d5ad51821c | |||
| 59b5800e58 | |||
| 1b84807eb0 | |||
| 3ab4736ac9 | |||
| d8aa40eedf | |||
| 2177c246d5 | |||
| e5c6448063 | |||
| f447668387 | |||
| d4ab383a1b | |||
| 87c254b238 | |||
| cc9165cb99 | |||
| df5c06ab7b | |||
| b2dcb75c6c | |||
| 074f191bc3 | |||
| 2bda584fc6 | |||
| b818543045 | |||
| 3175266681 | |||
| 1ae40abb09 | |||
| 1cea0b6f70 | |||
| 5c6061ea5a | |||
| 6799aa9806 | |||
| 049898fa30 | |||
| a29ca4947e | |||
| feb6014e92 | |||
| c7ae531e35 | |||
| c373afbddd | |||
| c970869d74 | |||
| 74873f377d | |||
| e8687e5b9e | |||
| 198498b1aa | |||
| 0527090a31 | |||
| dff96a8952 | |||
| 3d9f360b5a | |||
| b0bfa65be7 | |||
| c8ac3a2a72 | |||
| 957bb3124a | |||
| 1f37781bf1 | |||
| 7b62670987 | |||
| 7b5a4f71be | |||
| 94a9cd6477 | |||
| 0cfcc7cbf5 | |||
| 292755258a | |||
| 02e2ace199 | |||
| 4a40cf268d | |||
| 428fbe8228 | |||
| 81a12b2fac | |||
| fb636db61a | |||
| 369f1a64d8 | |||
| 6ed2840615 | |||
| eb3a05c437 | |||
| d29a0d64d5 | |||
| 09ad00b2d1 | |||
| f8192f6e46 | |||
| f360b3b849 | |||
| 6253560ffa | |||
| 74c23bf80d | |||
| 8d14ff1446 | |||
| 2814103458 | |||
| 21a631dd4e | |||
| d0e61d82c0 | |||
| 0edf5a2ab5 | |||
| 597d94bd3a | |||
| 73565728c7 | |||
| 3b53c5ada1 | |||
| cbdbeb3e69 | |||
| 80c1afde0f | |||
| c11665e92f | |||
| 333bd8f394 | |||
| e668e053c2 | |||
| ba9aa47260 | |||
| deda3d3a3c | |||
| ec028faa1b | |||
| 06adef7343 | |||
| 69c993092b | |||
| d25487dfb9 | |||
| f3f26f7cb3 | |||
| 90125ab639 | |||
| a16ae30a61 | |||
| 175207659a | |||
| 5129eb1d43 | |||
| 8f08e029d8 | |||
| 5c6c12dc3a | |||
| 734fa91e63 | |||
| 1d5eba4470 | |||
| 758d9db964 | |||
| 1d8b03964f | |||
| 4fa0937a55 | |||
| 82dc89bfd2 | |||
| a0bd811093 | |||
| c1d6d24b9d | |||
| e2871f0dcd | |||
| 4393c3ef7f | |||
| 59d48b9b1f | |||
| e8b1bbac83 | |||
| 885200f833 | |||
| 044938bfd0 | |||
| ab7fb5b2e3 | |||
| 3df0d62725 | |||
| d1ce0bc071 | |||
| 9714c9aebe | |||
| 2fcef3e8e2 | |||
| d7651ea0d0 | |||
| dd55c98139 | |||
| bb5ba482bc | |||
| 5903b002ac | |||
| 97b6eabe0c | |||
| 1326eb4ef7 | |||
| 0eee55c0dd | |||
| f8dee4e726 | |||
| 2c3bdfe2ea | |||
| ffeb4495fe | |||
| be555e3578 | |||
| eec97a5cf1 | |||
| fa3709451b | |||
| eaa6257baf | |||
| f2fd9ab1b0 | |||
| b5e98ac1b7 | |||
| b83c49befb | |||
| 4cb35a285b | |||
| 0b5b2a424c | |||
| 0868907359 | |||
| 670df2ea6d | |||
| 0970dbcdf3 | |||
| fbda8a2e2b | |||
| 3d34dddbc0 | |||
| 3b3b7e09ec | |||
| 5d26f88bd5 | |||
| 51977c64ee | |||
| 42216f52ab | |||
| 760c4e94d5 | |||
| a4e0fd7883 | |||
| 2287fa126c | |||
| fd4f49512d | |||
| 7d8acb8def | |||
| e7bf7e6031 | |||
| 518d9beb83 | |||
| 2ed4d4a30a | |||
| d2dc7a53c2 | |||
| 80cc860810 | |||
| 39289a6952 | |||
| 1761cacaa1 | |||
| f33b405152 | |||
| aec65112b5 | |||
| cce91eef61 | |||
| 46a839cbca | |||
| c5e31b1723 | |||
| 20d55e5fed | |||
| 01e3ccfd69 | |||
| 36541d61ab | |||
| a436e89b83 | |||
| faf7dda9d3 | |||
| d3139e47f8 | |||
| c893a90d64 | |||
| 586d50ff99 | |||
| ba9879f8fa | |||
| 3cd48db9a9 | |||
| 454a8ae26a | |||
| 9de9e37539 | |||
| 949191215b | |||
| decf844788 | |||
| 642dec3625 | |||
| 8e82dd0b5b | |||
| 5f13e2e336 | |||
| 4153d76810 | |||
| a66811a597 | |||
| 839dd66c3b | |||
| 7a8c132ee9 | |||
| 1e18d716c2 | |||
| 81193e9338 | |||
| d1cad5afa4 | |||
| 2a535bdce8 | |||
| 52244f690e | |||
| eaf681675a | |||
| 2385c06696 | |||
| 81e0f5bc7d | |||
| 18e277d9d3 | |||
| 025a4558fb | |||
| 85ca7fed93 | |||
| 7637eb863a | |||
| f9b7659b56 | |||
| 6195f7810a | |||
| ecba9b6738 | |||
| 93e3b3d5ba | |||
| 417bdb0488 | |||
| 8ea3b29c17 | |||
| 81f1001b2c | |||
| 99f98890c2 | |||
| 5f0026893f | |||
| 4f943a73bc | |||
| e31923be8d | |||
| 395235a529 | |||
| 55848a4bd8 | |||
| 19e768d43d | |||
| 3c7cdcdc22 | |||
| e0d487e339 | |||
| defff1e4a8 | |||
| 05a6d48753 | |||
| b12eb33feb | |||
| 00749d8ef0 | |||
| 59d047c1d7 | |||
| fb6b62a01b | |||
| 1bb5791e64 | |||
| e47316c9d3 | |||
| 88c0688961 | |||
| aa9cad0cc6 | |||
| 0950527437 | |||
| b7306ef07f | |||
| 0fc3fea8df | |||
| b5677907d0 | |||
| 6f40d57e14 | |||
| 2aaf66b789 | |||
| fdd85a529a | |||
| 477e36afab | |||
| 1068798465 | |||
| 4f375cd17d | |||
| 98159c0507 | |||
| ea345b1db7 | |||
| 51a0f7aaba | |||
| ab7f1a0608 | |||
| 201bbaacfc | |||
| 3929deed10 | |||
| 435981056e | |||
| e6f46f3832 | |||
| 1aea024589 | |||
| ce6a691999 | |||
| 10d73155b0 | |||
| 4b1b02a17d | |||
| f0bca012a5 | |||
| 56d355f8de | |||
| f5fc851925 | |||
| 7378905053 | |||
| 76b0df6ba1 | |||
| df8420aa62 | |||
| 72a047d549 | |||
| 3a511e4583 | |||
| e8d3ea803d | |||
| c5a4230a6a | |||
| 5249765508 | |||
| fdf83f1416 | |||
| e1b998e40a | |||
| 4277fcb32c | |||
| 9a4af6bd7c | |||
| 59265034ae | |||
| 0ac0324af2 | |||
| f38f2ace5a | |||
| b10831d58e | |||
| 817eb5a5ba | |||
| f36f91dfb5 | |||
| 172ea8c71c | |||
| da9748fb21 | |||
| be58e137c5 | |||
| 8519451161 | |||
| 7c1adff8ad | |||
| eca1509cb2 | |||
| 17b05c150c | |||
| bdf69db0a8 | |||
| ba48ce8586 | |||
| 5cce532a29 | |||
| a20eacaa48 | |||
| 4f042533a5 | |||
| 6e8da93c42 | |||
| bb33a26e62 | |||
| da2eaa6b09 | |||
| 8244284116 | |||
| db204c13f2 | |||
| 08d9aeff41 | |||
| aa1b4eded6 | |||
| 684692091e | |||
| ccca1ade2d | |||
| dc9e469c4c | |||
| ec028bf747 | |||
| 009920f393 | |||
| 666d95285b | |||
| b692d91ca3 | |||
| f4c31565bc | |||
| cf0604da07 | |||
| 55acb65e27 | |||
| 4f465c2d07 | |||
| 77519e9f14 | |||
| 22baf3356a | |||
| 360c553228 | |||
| b4d69527e6 | |||
| 4aba382b01 | |||
| 2c445743e9 | |||
| 6f38814541 | |||
| 7251850028 | |||
| 6eb268f63f | |||
| ae547c3044 | |||
| 23dd2cb6e7 | |||
| 8385cddd8d | |||
| ab5133514c | |||
| 75eb93140f | |||
| 8be7a0b131 | |||
| cd6468d6de | |||
| 822254291f | |||
| e29bf84f06 | |||
| 44800e9899 | |||
| 6e85c060a9 | |||
| 7c6d33b0d2 | |||
| 86b65e52c4 | |||
| 6310a00d7e | |||
| 6b93d20e4e | |||
| 909fac6d90 | |||
| 6c328ec096 | |||
| 1951d3a37a | |||
| aa7236e03c | |||
| 574153a810 | |||
| 3b30cc90f1 | |||
| f30b774f26 | |||
| 1063b3b2b8 | |||
| 93560836de | |||
| ff26b7446c | |||
| 7b6ad28a5d | |||
| 5d01a2f467 | |||
| 6e197d4a42 | |||
| a5b20fec2f | |||
| 348e989a50 | |||
| b19846aca1 | |||
| d951ba83e6 | |||
| 203a445bc1 | |||
| 9edefa645d | |||
| 4608e1f590 | |||
| 794f8f1329 | |||
| b1f3dfab28 | |||
| 2d6c84a817 | |||
| 23291a0466 | |||
| 83a1a70103 | |||
| 47f6fc1e07 | |||
| 88b34d2bb6 | |||
| f36fdc74ac | |||
| ff258d43e7 | |||
| d8ef6faa80 | |||
| 59eb77fd28 | |||
| dde0e9ee0a | |||
| 860d98a897 | |||
| 3abd307691 | |||
| 000818f5e4 | |||
| 1bbf55a7f7 | |||
| 298a357a43 | |||
| 44d2c5ef88 | |||
| 1600f7d4ee | |||
| 71a4c04dd5 | |||
| 0eef0ff0de | |||
| 1d0ee83e18 | |||
| db8631e49a | |||
| 2e295759f2 | |||
| d8582b7506 | |||
| 7f656b867f | |||
| 077fed1d88 | |||
| 152c5d2616 | |||
| 26c5bbc5a7 | |||
| 344e6b857a | |||
| 81e52138cc | |||
| a27a9b63e4 | |||
| 8b7c274db5 | |||
| 7bed539fdb | |||
| e990fd23f1 | |||
| 172ce67344 | |||
| a8d83aec89 | |||
| 38e5883d44 | |||
| e7c6abd767 | |||
| 9f7405b3f0 | |||
| d3f8111fe7 | |||
| ab43113f73 | |||
| d1a807fdf8 | |||
| 8df42a84a4 | |||
| 8f462b5717 | |||
| ace3e50898 | |||
| 68c1f05aeb | |||
| 1f770bb103 | |||
| e25567a5dd | |||
| 9951f28892 | |||
| 83ab68b36f | |||
| 80929c2637 | |||
| d786fb99e2 | |||
| a0fc5f7b52 | |||
| a6d39b7192 | |||
| ea87cd975d | |||
| 417a82fd95 | |||
| b781f76711 | |||
| 228d6050a4 | |||
| fd50f452ff | |||
| 6eedb64777 | |||
| 46776de90b | |||
| dfcef11bca | |||
| f1757f30cb | |||
| ddab1533c5 | |||
| 44c7f86f49 | |||
| 915c4b9ce2 | |||
| d7cc26cc17 | |||
| 5bc5ba7ee3 | |||
| 82df656cc7 | |||
| 51d09bb9c9 | |||
| 5a1f1305f0 | |||
| 3cf31205bc | |||
| 26a40373fc | |||
| 6b9e7defac | |||
| a63d9cc550 | |||
| 1e84cded98 | |||
| bb0cc1bbbc | |||
| 941ffea81c | |||
| 737cee4b8c | |||
| d3165cca4f | |||
| 2060ba3556 | |||
| e56ead5e1c | |||
| 4c93153194 | |||
| 8b9e68c32d | |||
| b2d3fffe74 | |||
| b5c5b175f1 | |||
| ecf19344f6 | |||
| b2473e57dd | |||
| d38aaa0c7e | |||
| 8696f98c3b | |||
| adee17847c | |||
| a7d82bd73b | |||
| de67c3f235 | |||
| 59a699063a | |||
| ff800e08fd | |||
| c0190eff00 | |||
| 4e445f2c55 | |||
| 9da817eae0 | |||
| a77e513443 | |||
| 664d386623 | |||
| 7cf4009838 | |||
| f8e30f49d7 | |||
| 5c087727a9 | |||
| 3b431f2f72 | |||
| e5b43d48ee | |||
| 8282d732c1 | |||
| 82f41d6e46 | |||
| b8c65078fc | |||
| 04419af419 | |||
| ed6a5ff7e5 | |||
| 956680104b | |||
| 3958ff8627 | |||
| 99b71c1dde | |||
| 73ddc762c8 | |||
| 7a5b3a1e6a | |||
| e2568d7589 | |||
| 0b1d754e7d | |||
| bbc2ee6da1 | |||
| 6ebf8ea230 | |||
| b96ceb4256 | |||
| b6dbc4c5c1 | |||
| 12b018e619 | |||
| 9b80e1e04a | |||
| bf6a1816b4 | |||
| 4f05a66ee1 | |||
| dcc9b0d437 | |||
| 622d100c30 | |||
| 74997a5251 | |||
| 50148f7185 | |||
| 8f57a3e28a | |||
| 2511e869e2 | |||
| aa612124f2 | |||
| 3e050fb35a | |||
| 3dee10636c | |||
| eb3bdb7550 | |||
| 33fdb9ab8b | |||
| 97c19de8b9 | |||
| 4e19c59ab3 | |||
| 9cf5b96971 | |||
| 0eed5e0667 | |||
| 69a710fef1 | |||
| d2613ce077 | |||
| f2e222b9e8 | |||
| a6ee4a0468 | |||
| d3b8f30818 | |||
| 2390f6d3ab | |||
| d8b1343279 | |||
| eacb6b6e8b | |||
| 7efffc1548 | |||
| 10e366ebd7 | |||
| 95590adf07 | |||
| be67acbd48 | |||
| 8d06cf7b84 | |||
| 216f9b45cc | |||
| 645b586041 | |||
| 1962c13455 | |||
| 069ec3f9a9 | |||
| 56035e9965 | |||
| 4e3b566f72 | |||
| d65c99f38b | |||
| 90c7d28055 | |||
| 8b684637bc | |||
| d2df00bfca | |||
| 25ec0fecfa | |||
| 227b96b28b | |||
| a2fc7da587 | |||
| a2c013c8c7 | |||
| f27196214b | |||
| aa616cd410 | |||
| 5926159890 | |||
| c9f88297b8 | |||
| 5cc87abb3a | |||
| 355dfed437 | |||
| 802ae73b13 | |||
| 549c814e8d | |||
| 564fbc8dec | |||
| 972248c333 | |||
| df44bcc5ae | |||
| 3293823642 | |||
| 24b302c001 | |||
| 4714fb8fcb | |||
| 2a54fd1444 | |||
| b0ff3a4c6d | |||
| 7aadfe32e7 | |||
| 8ce9306b27 | |||
| 438e894899 | |||
| 80682ec61e | |||
| deaa70c2cc | |||
| 7535c21894 | |||
| 8327667988 | |||
| b6b4bf0959 | |||
| d60619f8e5 | |||
| 658e1ebe5a | |||
| 54963cc898 | |||
| ad879a1f90 | |||
| 513f25d42c | |||
| 2559745f54 | |||
| 7326fe1136 | |||
| 97a43f0c2f | |||
| 279b73fecd | |||
| 87b655e59e | |||
| 677d490b5c | |||
| 6ee4ba6932 | |||
| 77cef3bef2 | |||
| 4a857f1af6 | |||
| 50a1352f7f | |||
| 1d0739d6d1 | |||
| 69a7d4e0a5 | |||
| 2fb35f7991 | |||
| 5fe15c7f10 | |||
| 094bebcc2d | |||
| abb15bc30a | |||
| 8e18e05d1d | |||
| aa80882bdf | |||
| e4466b55b5 | |||
| 60ea0f1222 | |||
| b60efb4230 | |||
| 2f4a42b313 | |||
| fff4d71ba5 | |||
| e1ab285435 | |||
| 26ebeadfaa | |||
| 30e4b85587 | |||
| 44edffa0a9 | |||
| 20b57f9d38 | |||
| ddf5d68815 | |||
| 298863c2d0 | |||
| 8e8787ad63 | |||
| 12151e62ee | |||
| efc1029226 | |||
| 1b09733e7c | |||
| d8ef9bda18 | |||
| 1b870377b1 | |||
| 267c247da7 | |||
| 95296191a2 | |||
| 8ab368559a | |||
| bb111b928b | |||
| 91abf07087 | |||
| e642a64b68 | |||
| 64f077fd2a | |||
| 5fefa200ba | |||
| 4388719c5d | |||
| 46c2841904 | |||
| 03904697ac | |||
| 9bd230cf64 | |||
| 309890cb8c | |||
| f9f0ee0f21 | |||
| 640526f0c8 | |||
| 9af9596f69 | |||
| 6e9093c288 | |||
| 0c4e9980fb | |||
| 13a3fb1acc | |||
| 343dd1c0b8 | |||
| 64029ef8a6 | |||
| 524f4ee0cf | |||
| 34aeaec553 | |||
| 0e4b6b373d | |||
| 193a0e9273 | |||
| 39cc36d3f1 | |||
| 87d3a1ae4d | |||
| 5289c4135a | |||
| dcd7949544 | |||
| 277eb16d67 | |||
| 41ba4e507e | |||
| c9980c0a5c | |||
| 3e9504d306 | |||
| 1b68ee82ce | |||
| 4bf0e15653 | |||
| b63a55666d | |||
| f02ca2a9a3 | |||
| 4fb3ce4739 | |||
| 704640bf98 | |||
| b48a77c88a | |||
| db6de76acb | |||
| 15be1cb9a9 | |||
| 4817c0d055 | |||
| 893092ff7f | |||
| 8b7c1e9cec | |||
| 393ceb28fc | |||
| d9cb7be444 | |||
| 5837f067cf | |||
| 5e5a177934 | |||
| 0b5b03d9dc | |||
| 9288d80613 | |||
| 6698db29de | |||
| 25e86a520d | |||
| a6f7cda23e | |||
| b0e282a74b | |||
| 46ed54cd8e | |||
| 9c870baf84 | |||
| 21249f7c3d | |||
| 471c2b5d5c | |||
| e792c2b234 | |||
| daa85f71e1 | |||
| 9850ba0cbd | |||
| c0a8275cb0 | |||
| 318c419f77 | |||
| 7e1232269a | |||
| 62d52d62dc | |||
| 77cf42588f | |||
| 50f6c645de | |||
| 7ade65d44b | |||
| a979c428ee | |||
| 6920769a9a | |||
| 410aa0716d | |||
| 445a7f65cd | |||
| e64cfb13b8 | |||
| e374d87ac4 | |||
| 2296d98845 | |||
| 9aac3d8773 | |||
| 6569b9ba56 | |||
| 7ab9abe4ef | |||
| 3357170b18 | |||
| 2e746f2b8b | |||
| 594c075377 | |||
| 8bb1e91afd | |||
| a12d1b21b5 | |||
| 5bed2f351a | |||
| 209560fcd2 | |||
| ec9d7b639d | |||
| 1c97c1582c | |||
| f06f4b40b8 | |||
| 3235beef6d | |||
| e5ab783b08 | |||
| 355ebec92d | |||
| fa157f08ff | |||
| 39a545b3f8 | |||
| 226fe192a1 | |||
| e9bc9a2ab4 | |||
| b22c87183f | |||
| fa44130734 | |||
| 9b3f27f02a | |||
| 1d5fb360cc | |||
| a7398a0459 | |||
| 91c5c2538a | |||
| 259cf1b0b2 | |||
| 2338632270 | |||
| 2a88a3fd33 | |||
| 84470f6b2a | |||
| 10d72f31c2 | |||
| e04902f589 | |||
| 31d0b77df7 | |||
| 9e82533eb9 | |||
| 4410aac60b | |||
| d63d08ef8b | |||
| 5911dc597a | |||
| 5c2ff6ed19 | |||
| 6efad5e495 | |||
| 5f708d47ce | |||
| 23dbaaf03b | |||
| 3b4b9c6d68 | |||
| 8df47d76c7 | |||
| be55a49946 | |||
| e05af35678 | |||
| 060d16d26b | |||
| 0976d22225 | |||
| e17869ca20 | |||
| 1c3d06876e | |||
| 662105c1b6 | |||
| b8ddae61e2 | |||
| ece14af556 | |||
| b07a2aa23c | |||
| 88857e8028 | |||
| 8e808fcadc | |||
| da93a272a0 | |||
| fcd3b326e9 | |||
| 3d5b10735f | |||
| 94228d4522 | |||
| f054f566b4 | |||
| 167058b61f | |||
| f835245ee1 | |||
| 98c7bde514 | |||
| 38110e220d | |||
| 75e4867d22 | |||
| 9239fcf0da | |||
| 73c5675485 | |||
| 381ebc043f | |||
| c7e0a49c94 | |||
| 067622fcc6 | |||
| ae256576e1 | |||
| cbfcce09fa | |||
| a21201a713 | |||
| 53f2f188f2 | |||
| a6e95c7d25 | |||
| 97e6663bb3 | |||
| e2ceb1b800 | |||
| 8c93295d62 | |||
| c26242a553 | |||
| b825bc87ae | |||
| dac5f20a01 | |||
| b211fa4e1f | |||
| a4954a68e0 | |||
| 355cba4aa7 | |||
| 2f0164b995 | |||
| e287e14354 | |||
| 5e63ba970d | |||
| 2a46ab288e | |||
| 7999249a5c | |||
| 0ec9a7f090 | |||
| a47c5c093d | |||
| 5a674a8e10 | |||
| bcb8722513 | |||
| 4c34b3ad9c | |||
| 1b8b5c4b06 | |||
| 451c1fb5f9 | |||
| 4e19ff75b6 | |||
| 94caabf89a | |||
| f365448338 | |||
| 3d1536a1b2 | |||
| 8ab426c3a4 | |||
| 33d28c24bf | |||
| ac70048945 | |||
| 40a4a716e1 | |||
| 802f147686 | |||
| 80a0f935a1 | |||
| de3c9bade6 | |||
| 7f8ff0a724 | |||
| 3a8923be74 | |||
| 723a34d9c7 | |||
| 2efd5b119d | |||
| b105e47cb5 | |||
| 0c2cefed8f | |||
| 41dcbe89dd | |||
| 70a64355f6 | |||
| aefd2a5c4b | |||
| e37a1ded0d | |||
| 3e28243076 | |||
| bbb94b8f68 | |||
| a277b43e30 | |||
| 8a994fb1b1 | |||
| 9ee92f1246 | |||
| ac2ac99e15 | |||
| 72e9534d11 | |||
| c1cc79176c | |||
| f25dccd6d1 | |||
| cd09a83cfa | |||
| 9bbc2df217 | |||
| 74d430cb97 | |||
| ca13f4c3dd | |||
| 9d4d53e2fd | |||
| 00896f1713 | |||
| c3a9e95a5f | |||
| 0afd25a010 | |||
| 5b87843fae | |||
| 386b74f8c2 | |||
| 2a963fb5d1 | |||
| d69c5317df | |||
| 2864ef8c7f | |||
| 534bbb81ff | |||
| 3e5485de92 | |||
| 9e147e9ac4 | |||
| 8ab2e420f6 | |||
| b4c53af07d |
@@ -29,31 +29,29 @@ jobs:
|
||||
- DUE
|
||||
- esp32
|
||||
- linux_native
|
||||
- mega2560
|
||||
- megaatmega2560
|
||||
- teensy31
|
||||
- teensy35
|
||||
- SAMD51_grandcentral_m4
|
||||
|
||||
# Extended AVR Environments
|
||||
|
||||
- FYSETC_F6_13
|
||||
- mega1280
|
||||
- megaatmega1280
|
||||
- rambo
|
||||
- sanguino1284p
|
||||
- sanguino644p
|
||||
- sanguino_atmega1284p
|
||||
- sanguino_atmega644p
|
||||
|
||||
# Extended STM32 Environments
|
||||
|
||||
- STM32F103RC_btt
|
||||
- STM32F103RC_btt_USB
|
||||
- STM32F103RE_btt
|
||||
- STM32F103RE_btt_USB
|
||||
- STM32F103RC_bigtree
|
||||
- STM32F103RC_bigtree_USB
|
||||
- STM32F103RE_bigtree
|
||||
- STM32F103RE_bigtree_USB
|
||||
- STM32F103RC_fysetc
|
||||
- jgaurora_a5s_a1
|
||||
- STM32F103VE_longer
|
||||
- STM32F407VE_black
|
||||
- BIGTREE_SKR_PRO
|
||||
- BIGTREE_GTR_V1_0
|
||||
- mks_robin
|
||||
- ARMED
|
||||
- FYSETC_S6
|
||||
@@ -77,6 +75,7 @@ jobs:
|
||||
#- mks_robin_lite
|
||||
#- mks_robin_mini
|
||||
#- mks_robin_nano
|
||||
#- SAMD51_grandcentral_m4
|
||||
|
||||
steps:
|
||||
|
||||
|
||||
+3
-4
@@ -14,11 +14,12 @@ env:
|
||||
- TEST_PLATFORM="esp32"
|
||||
- TEST_PLATFORM="linux_native"
|
||||
- TEST_PLATFORM="megaatmega2560"
|
||||
- TEST_PLATFORM="STM32F103RE"
|
||||
- TEST_PLATFORM="teensy31"
|
||||
- TEST_PLATFORM="teensy35"
|
||||
|
||||
# Extended AVR Environments
|
||||
- TEST_PLATFORM="FYSETC_F6_13"
|
||||
- TEST_PLATFORM="fysetc_f6_13"
|
||||
- TEST_PLATFORM="megaatmega1280"
|
||||
- TEST_PLATFORM="rambo"
|
||||
- TEST_PLATFORM="sanguino_atmega1284p"
|
||||
@@ -26,9 +27,7 @@ env:
|
||||
|
||||
# Extended STM32 Environments
|
||||
- TEST_PLATFORM="STM32F103RC_bigtree"
|
||||
- TEST_PLATFORM="STM32F103RC_bigtree_USB"
|
||||
- TEST_PLATFORM="STM32F103RE_bigtree"
|
||||
- TEST_PLATFORM="STM32F103RE_bigtree_USB"
|
||||
- TEST_PLATFORM="STM32F103RC_bigtree_NOUSB"
|
||||
- TEST_PLATFORM="STM32F103RC_fysetc"
|
||||
- TEST_PLATFORM="jgaurora_a5s_a1"
|
||||
- TEST_PLATFORM="STM32F103VE_longer"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
@@ -36,7 +36,7 @@
|
||||
* Advanced settings can be found in Configuration_adv.h
|
||||
*
|
||||
*/
|
||||
#define CONFIGURATION_H_VERSION 020005
|
||||
#define CONFIGURATION_H_VERSION 020000
|
||||
|
||||
//===========================================================================
|
||||
//============================= Getting Started =============================
|
||||
@@ -99,7 +99,6 @@
|
||||
/**
|
||||
* Select the serial port on the board to use for communication with the host.
|
||||
* This allows the connection of wireless adapters (for instance) to non-default port pins.
|
||||
* Serial port -1 is the USB emulated serial port, if available.
|
||||
* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
|
||||
*
|
||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
@@ -108,6 +107,9 @@
|
||||
|
||||
/**
|
||||
* Select a secondary serial port on the board to use for communication with the host.
|
||||
* This allows the connection of wireless adapters (for instance) to non-default port pins.
|
||||
* Serial port -1 is the USB emulated serial port, if available.
|
||||
*
|
||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
*/
|
||||
//#define SERIAL_PORT_2 -1
|
||||
@@ -361,7 +363,6 @@
|
||||
* 331 : (3.3V scaled thermistor 1 table for MEGA)
|
||||
* 332 : (3.3V scaled thermistor 1 table for DUE)
|
||||
* 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
|
||||
* 202 : 200k thermistor - Copymaster 3D
|
||||
* 3 : Mendel-parts thermistor (4.7k pullup)
|
||||
* 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
|
||||
* 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan & J-Head) (4.7k pullup)
|
||||
@@ -473,7 +474,7 @@
|
||||
#if ENABLED(PIDTEMP)
|
||||
//#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
|
||||
//#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
|
||||
//#define PID_DEBUG // Sends debug data to the serial port. Use 'M303 D' to toggle activation.
|
||||
//#define PID_DEBUG // Sends debug data to the serial port.
|
||||
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
|
||||
//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
|
||||
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
|
||||
@@ -783,8 +784,6 @@
|
||||
#define DEFAULT_YJERK 10.0
|
||||
#define DEFAULT_ZJERK 0.3
|
||||
|
||||
//#define TRAVEL_EXTRA_XYJERK 0.0 // Additional jerk allowance for all travel moves
|
||||
|
||||
//#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
|
||||
#if ENABLED(LIMITED_JERK_EDITING)
|
||||
#define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
|
||||
@@ -924,14 +923,6 @@
|
||||
#define SMART_EFFECTOR_MOD_PIN -1 // Connect a GPIO pin to the Smart Effector MOD pin
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Use StallGuard2 to probe the bed with the nozzle.
|
||||
* Requires stallGuard-capable Trinamic stepper drivers.
|
||||
* CAUTION: This can damage machines with Z lead screws.
|
||||
* Take extreme care when setting up this feature.
|
||||
*/
|
||||
//#define SENSORLESS_PROBING
|
||||
|
||||
//
|
||||
// For Z_PROBE_ALLEN_KEY see the Delta example configurations.
|
||||
//
|
||||
@@ -1074,14 +1065,12 @@
|
||||
|
||||
// @section homing
|
||||
|
||||
//#define NO_MOTION_BEFORE_HOMING // Inhibit movement until all axes have been homed
|
||||
//#define NO_MOTION_BEFORE_HOMING // Inhibit movement until all axes have been homed
|
||||
|
||||
//#define UNKNOWN_Z_NO_RAISE // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off.
|
||||
//#define UNKNOWN_Z_NO_RAISE // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off.
|
||||
|
||||
//#define Z_HOMING_HEIGHT 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ...
|
||||
// Be sure to have this much clearance over your Z_MAX_POS to prevent grinding.
|
||||
|
||||
//#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing Z
|
||||
//#define Z_HOMING_HEIGHT 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ...
|
||||
// Be sure you have this distance over your Z_MAX_POS in case.
|
||||
|
||||
// Direction of endstops when homing; 1=MAX, -1=MIN
|
||||
// :[-1,1]
|
||||
@@ -1243,7 +1232,6 @@
|
||||
#define MESH_TEST_HOTEND_TEMP 205 // (°C) Default nozzle temperature for the G26 Mesh Validation Tool.
|
||||
#define MESH_TEST_BED_TEMP 60 // (°C) Default bed temperature for the G26 Mesh Validation Tool.
|
||||
#define G26_XY_FEEDRATE 20 // (mm/s) Feedrate for XY Moves for the G26 Mesh Validation Tool.
|
||||
#define G26_RETRACT_MULTIPLIER 1.0 // G26 Q (retraction) used by default between mesh test elements.
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1323,10 +1311,10 @@
|
||||
//#define LEVEL_BED_CORNERS
|
||||
|
||||
#if ENABLED(LEVEL_BED_CORNERS)
|
||||
#define LEVEL_CORNERS_INSET_LFRB { 30, 30, 30, 30 } // (mm) Left, Front, Right, Back insets
|
||||
#define LEVEL_CORNERS_HEIGHT 0.0 // (mm) Z height of nozzle at leveling points
|
||||
#define LEVEL_CORNERS_Z_HOP 4.0 // (mm) Z height of nozzle between leveling points
|
||||
//#define LEVEL_CENTER_TOO // Move to the center after the last corner
|
||||
#define LEVEL_CORNERS_INSET 30 // (mm) An inset for corner leveling
|
||||
#define LEVEL_CORNERS_Z_HOP 4.0 // (mm) Move nozzle up before moving between corners
|
||||
#define LEVEL_CORNERS_HEIGHT 0.0 // (mm) Z height of nozzle at leveling points
|
||||
//#define LEVEL_CENTER_TOO // Move to the center after the last corner
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -1445,7 +1433,6 @@
|
||||
//#define EEPROM_SETTINGS // Persistent storage with M500 and M501
|
||||
//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!
|
||||
#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
|
||||
#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
|
||||
#if ENABLED(EEPROM_SETTINGS)
|
||||
//#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
|
||||
#endif
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
@@ -31,7 +31,7 @@
|
||||
* Basic settings can be found in Configuration.h
|
||||
*
|
||||
*/
|
||||
#define CONFIGURATION_ADV_H_VERSION 020005
|
||||
#define CONFIGURATION_ADV_H_VERSION 020000
|
||||
|
||||
// @section temperature
|
||||
|
||||
@@ -276,10 +276,8 @@
|
||||
#define AUTOTEMP_OLDWEIGHT 0.98
|
||||
#endif
|
||||
|
||||
// Extra options for the M114 "Current Position" report
|
||||
//#define M114_DETAIL // Use 'M114` for details to check planner calculations
|
||||
//#define M114_REALTIME // Real current position based on forward kinematics
|
||||
//#define M114_LEGACY // M114 used to synchronize on every call. Enable if needed.
|
||||
// Show extra position information with 'M114 D'
|
||||
//#define M114_DETAIL
|
||||
|
||||
// Show Temperature ADC value
|
||||
// Enable for M105 to include ADC values read from temperature sensors.
|
||||
@@ -338,22 +336,15 @@
|
||||
* Controller Fan
|
||||
* To cool down the stepper drivers and MOSFETs.
|
||||
*
|
||||
* The fan turns on automatically whenever any driver is enabled and turns
|
||||
* off (or reduces to idle speed) shortly after drivers are turned off.
|
||||
*
|
||||
* The fan will turn on automatically whenever any stepper is enabled
|
||||
* and turn off after a set period after all steppers are turned off.
|
||||
*/
|
||||
//#define USE_CONTROLLER_FAN
|
||||
#if ENABLED(USE_CONTROLLER_FAN)
|
||||
//#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
|
||||
//#define CONTROLLER_FAN_USE_Z_ONLY // With this option only the Z axis is considered
|
||||
#define CONTROLLERFAN_SPEED_MIN 0 // (0-255) Minimum speed. (If set below this value the fan is turned off.)
|
||||
#define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled
|
||||
#define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled
|
||||
#define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors
|
||||
//#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
|
||||
#if ENABLED(CONTROLLER_FAN_EDITABLE)
|
||||
#define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu
|
||||
#endif
|
||||
//#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
|
||||
#define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
|
||||
#define CONTROLLERFAN_SPEED 255 // 255 == full speed
|
||||
//#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled
|
||||
#endif
|
||||
|
||||
// When first starting the main fan, run it at full speed for the
|
||||
@@ -677,37 +668,11 @@
|
||||
*/
|
||||
//#define Z_STEPPER_AUTO_ALIGN
|
||||
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
|
||||
// Define probe X and Y positions for Z1, Z2 [, Z3 [, Z4]]
|
||||
// If not defined, probe limits will be used.
|
||||
// Override with 'M422 S<index> X<pos> Y<pos>'
|
||||
//#define Z_STEPPER_ALIGN_XY { { 10, 190 }, { 100, 10 }, { 190, 190 } }
|
||||
|
||||
/**
|
||||
* Orientation for the automatically-calculated probe positions.
|
||||
* Override Z stepper align points with 'M422 S<index> X<pos> Y<pos>'
|
||||
*
|
||||
* 2 Steppers: (0) (1)
|
||||
* | | 2 |
|
||||
* | 1 2 | |
|
||||
* | | 1 |
|
||||
*
|
||||
* 3 Steppers: (0) (1) (2) (3)
|
||||
* | 3 | 1 | 2 1 | 2 |
|
||||
* | | 3 | | 3 |
|
||||
* | 1 2 | 2 | 3 | 1 |
|
||||
*
|
||||
* 4 Steppers: (0) (1) (2) (3)
|
||||
* | 4 3 | 1 4 | 2 1 | 3 2 |
|
||||
* | | | | |
|
||||
* | 1 2 | 2 3 | 3 4 | 4 1 |
|
||||
*
|
||||
*/
|
||||
#ifndef Z_STEPPER_ALIGN_XY
|
||||
//#define Z_STEPPERS_ORIENTATION 0
|
||||
#endif
|
||||
// Define probe X and Y positions for Z1, Z2 [, Z3]
|
||||
#define Z_STEPPER_ALIGN_XY { { 10, 190 }, { 100, 10 }, { 190, 190 } }
|
||||
|
||||
// Provide Z stepper positions for more rapid convergence in bed alignment.
|
||||
// Requires triple stepper drivers (i.e., set NUM_Z_STEPPER_DRIVERS to 3)
|
||||
// Currently requires triple stepper drivers.
|
||||
//#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
|
||||
#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
|
||||
// Define Stepper XY positions for Z1, Z2, Z3 corresponding to
|
||||
@@ -715,19 +680,23 @@
|
||||
// Define one position per Z stepper in stepper driver order.
|
||||
#define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
|
||||
#else
|
||||
// Amplification factor. Used to scale the correction step up or down in case
|
||||
// the stepper (spindle) position is farther out than the test point.
|
||||
#define Z_STEPPER_ALIGN_AMP 1.0 // Use a value > 1.0 NOTE: This may cause instability!
|
||||
// Amplification factor. Used to scale the correction step up or down.
|
||||
// In case the stepper (spindle) position is further out than the test point.
|
||||
// Use a value > 1. NOTE: This may cause instability
|
||||
#define Z_STEPPER_ALIGN_AMP 1.0
|
||||
#endif
|
||||
|
||||
// Set number of iterations to align
|
||||
#define Z_STEPPER_ALIGN_ITERATIONS 3
|
||||
|
||||
// Enable to restore leveling setup after operation
|
||||
#define RESTORE_LEVELING_AFTER_G34
|
||||
|
||||
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
|
||||
#define G34_MAX_GRADE 5 // (%) Maximum incline that G34 will handle
|
||||
#define Z_STEPPER_ALIGN_ITERATIONS 5 // Number of iterations to apply during alignment
|
||||
#define Z_STEPPER_ALIGN_ACC 0.02 // Stop iterating early if the accuracy is better than this
|
||||
#define RESTORE_LEVELING_AFTER_G34 // Restore leveling after G34 is done?
|
||||
// After G34, re-home Z (G28 Z) or just calculate it from the last probe heights?
|
||||
// Re-homing might be more precise in reproducing the actual 'G28 Z' homing height, especially on an uneven bed.
|
||||
#define HOME_AFTER_G34
|
||||
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
|
||||
|
||||
// Stop criterion. If the accuracy is better than this stop iterating early
|
||||
#define Z_STEPPER_ALIGN_ACC 0.02
|
||||
#endif
|
||||
|
||||
// @section motion
|
||||
@@ -760,12 +729,8 @@
|
||||
// Minimum time that a segment needs to take if the buffer is emptied
|
||||
#define DEFAULT_MINSEGMENTTIME 20000 // (ms)
|
||||
|
||||
// Slow down the machine if the look ahead buffer is (by default) half full.
|
||||
// Increase the slowdown divisor for larger buffer sizes.
|
||||
// If defined the movements slow down when the look ahead buffer is only half full
|
||||
#define SLOWDOWN
|
||||
#if ENABLED(SLOWDOWN)
|
||||
#define SLOWDOWN_DIVISOR 2
|
||||
#endif
|
||||
|
||||
// Frequency limit
|
||||
// See nophead's blog for more info
|
||||
@@ -856,8 +821,8 @@
|
||||
|
||||
// Define the pin to read during calibration
|
||||
#ifndef CALIBRATION_PIN
|
||||
//#define CALIBRATION_PIN -1 // Define here to override the default pin
|
||||
#define CALIBRATION_PIN_INVERTING false // Set to true to invert the custom pin
|
||||
#define CALIBRATION_PIN -1 // Override in pins.h or set to -1 to use your Z endstop
|
||||
#define CALIBRATION_PIN_INVERTING false // Set to true to invert the pin
|
||||
//#define CALIBRATION_PIN_PULLDOWN
|
||||
#define CALIBRATION_PIN_PULLUP
|
||||
#endif
|
||||
@@ -1006,11 +971,7 @@
|
||||
// Show the E position (filament used) during printing
|
||||
//#define LCD_SHOW_E_TOTAL
|
||||
|
||||
#if ENABLED(SHOW_BOOTSCREEN)
|
||||
#define BOOTSCREEN_TIMEOUT 4000 // (ms) Total Duration to display the boot screen(s)
|
||||
#endif
|
||||
|
||||
#if HAS_GRAPHICAL_LCD && EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
|
||||
#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
|
||||
//#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
|
||||
//#define SHOW_REMAINING_TIME // Display estimated time to completion
|
||||
#if ENABLED(SHOW_REMAINING_TIME)
|
||||
@@ -1019,7 +980,7 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAS_CHARACTER_LCD && EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
|
||||
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
|
||||
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
|
||||
#if ENABLED(LCD_PROGRESS_BAR)
|
||||
#define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar
|
||||
@@ -1032,9 +993,12 @@
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
|
||||
// The standard SD detect circuit reads LOW when media is inserted and HIGH when empty.
|
||||
// Enable this option and set to HIGH if your SD cards are incorrectly detected.
|
||||
//#define SD_DETECT_STATE HIGH
|
||||
// Some RAMPS and other boards don't detect when an SD card is inserted. You can work
|
||||
// around this by connecting a push button or single throw switch to the pin defined
|
||||
// as SD_DETECT_PIN in your board's pins definitions.
|
||||
// This setting should be disabled unless you are using a push button, pulling the pin to ground.
|
||||
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
|
||||
#define SD_DETECT_INVERTED
|
||||
|
||||
#define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished
|
||||
#define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the Z enabled so your bed stays in place.
|
||||
@@ -1049,10 +1013,6 @@
|
||||
|
||||
#define EVENT_GCODE_SD_STOP "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27")
|
||||
|
||||
#if ENABLED(PRINTER_EVENT_LEDS)
|
||||
#define PE_LEDS_COMPLETED_TIME (30*60) // (seconds) Time to keep the LED "done" color before restoring normal illumination
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Continue after Power-Loss (Creality3D)
|
||||
*
|
||||
@@ -1060,16 +1020,12 @@
|
||||
* during SD printing. If the recovery file is found at boot time, present
|
||||
* an option on the LCD screen to continue the print from the last-known
|
||||
* point in the file.
|
||||
*
|
||||
* If the machine reboots when resuming a print you may need to replace or
|
||||
* reformat the SD card. (Bad sectors delay startup triggering the watchdog.)
|
||||
*/
|
||||
//#define POWER_LOSS_RECOVERY
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
#define PLR_ENABLED_DEFAULT false // Power Loss Recovery enabled by default. (Set with 'M413 Sn' & M500)
|
||||
//#define BACKUP_POWER_SUPPLY // Backup power / UPS to move the steppers on power loss
|
||||
//#define POWER_LOSS_ZRAISE 2 // (mm) Z axis raise on resume (on power loss with UPS)
|
||||
//#define POWER_LOSS_PIN 44 // Pin to detect power loss. Set to -1 to disable default pin on boards without module.
|
||||
//#define POWER_LOSS_PIN 44 // Pin to detect power loss
|
||||
//#define POWER_LOSS_STATE HIGH // State of pin indicating power loss
|
||||
//#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate
|
||||
//#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume
|
||||
@@ -1197,16 +1153,18 @@
|
||||
// Add an optimized binary file transfer mode, initiated with 'M28 B1'
|
||||
//#define BINARY_FILE_TRANSFER
|
||||
|
||||
/**
|
||||
* Set this option to one of the following (or the board's defaults apply):
|
||||
*
|
||||
* LCD - Use the SD drive in the external LCD controller.
|
||||
* ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
|
||||
* CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
|
||||
*
|
||||
* :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
|
||||
*/
|
||||
//#define SDCARD_CONNECTION LCD
|
||||
#if HAS_SDCARD_CONNECTION
|
||||
/**
|
||||
* Set this option to one of the following (or the board's defaults apply):
|
||||
*
|
||||
* LCD - Use the SD drive in the external LCD controller.
|
||||
* ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
|
||||
* CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
|
||||
*
|
||||
* :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
|
||||
*/
|
||||
//#define SDCARD_CONNECTION LCD
|
||||
#endif
|
||||
|
||||
#endif // SDSUPPORT
|
||||
|
||||
@@ -1246,6 +1204,10 @@
|
||||
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
||||
//#define USE_SMALL_INFOFONT
|
||||
|
||||
// Enable this option and reduce the value to optimize screen updates.
|
||||
// The normal delay is 10µs. Use the lowest value that still gives a reliable display.
|
||||
//#define DOGM_SPI_DELAY_US 5
|
||||
|
||||
// Swap the CW/CCW indicators in the graphics overlay
|
||||
//#define OVERLAY_GFX_REVERSE
|
||||
|
||||
@@ -1262,10 +1224,6 @@
|
||||
* This will prevent position updates from being displayed.
|
||||
*/
|
||||
#if ENABLED(U8GLIB_ST7920)
|
||||
// Enable this option and reduce the value to optimize screen updates.
|
||||
// The normal delay is 10µs. Use the lowest value that still gives a reliable display.
|
||||
//#define DOGM_SPI_DELAY_US 5
|
||||
|
||||
//#define LIGHTWEIGHT_UI
|
||||
#if ENABLED(LIGHTWEIGHT_UI)
|
||||
#define STATUS_EXPIRE_SECONDS 20
|
||||
@@ -1283,7 +1241,6 @@
|
||||
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
|
||||
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
|
||||
#define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
|
||||
//#define STATUS_CUTTER_ANIM // Use a second bitmap to indicate spindle / laser active
|
||||
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
|
||||
//#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
|
||||
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
|
||||
@@ -1303,7 +1260,7 @@
|
||||
// Additional options for DGUS / DWIN displays
|
||||
//
|
||||
#if HAS_DGUS_LCD
|
||||
#define DGUS_SERIAL_PORT 3
|
||||
#define DGUS_SERIAL_PORT 2
|
||||
#define DGUS_BAUDRATE 115200
|
||||
|
||||
#define DGUS_RX_BUFFER_SIZE 128
|
||||
@@ -1311,15 +1268,16 @@
|
||||
//#define DGUS_SERIAL_STATS_RX_BUFFER_OVERRUNS // Fix Rx overrun situation (Currently only for AVR)
|
||||
|
||||
#define DGUS_UPDATE_INTERVAL_MS 500 // (ms) Interval between automatic screen updates
|
||||
#define BOOTSCREEN_TIMEOUT 3000 // (ms) Duration to display the boot screen
|
||||
|
||||
#if EITHER(DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY)
|
||||
#define DGUS_PRINT_FILENAME // Display the filename during printing
|
||||
#define DGUS_PREHEAT_UI // Display a preheat screen during heatup
|
||||
|
||||
#if ENABLED(DGUS_LCD_UI_FYSETC)
|
||||
//#define DGUS_UI_MOVE_DIS_OPTION // Disabled by default for UI_FYSETC
|
||||
//#define DUGS_UI_MOVE_DIS_OPTION // Disabled by default for UI_FYSETC
|
||||
#else
|
||||
#define DGUS_UI_MOVE_DIS_OPTION // Enabled by default for UI_HIPRECY
|
||||
#define DUGS_UI_MOVE_DIS_OPTION // Enabled by default for UI_HIPRECY
|
||||
#endif
|
||||
|
||||
#define DGUS_FILAMENT_LOADUNLOAD
|
||||
@@ -1356,11 +1314,9 @@
|
||||
//#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping
|
||||
//#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping
|
||||
//#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
|
||||
//#define S6_TFT_PINMAP // FYSETC S6 pin mapping
|
||||
|
||||
//#define OTHER_PIN_LAYOUT // Define pins manually below
|
||||
#if ENABLED(OTHER_PIN_LAYOUT)
|
||||
// Pins for CS and MOD_RESET (PD) must be chosen
|
||||
// The pins for CS and MOD_RESET (PD) must be chosen.
|
||||
#define CLCD_MOD_RESET 9
|
||||
#define CLCD_SPI_CS 10
|
||||
|
||||
@@ -1470,7 +1426,6 @@
|
||||
*/
|
||||
//#define BABYSTEPPING
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
//#define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR
|
||||
//#define BABYSTEP_WITHOUT_HOMING
|
||||
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
|
||||
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
|
||||
@@ -1599,12 +1554,19 @@
|
||||
|
||||
// Add additional compensation depending on hotend temperature
|
||||
// Note: this values cannot be calibrated and have to be set manually
|
||||
#if ENABLED(PROBE_TEMP_COMPENSATION)
|
||||
#ifdef PROBE_TEMP_COMPENSATION
|
||||
// Max temperature that can be reached by heated bed.
|
||||
// This is required only for the calibration process.
|
||||
#define PTC_MAX_BED_TEMP 110
|
||||
|
||||
// Park position to wait for probe cooldown
|
||||
#define PTC_PARK_POS { 0, 0, 100 }
|
||||
#define PTC_PARK_POS_X 0.0F
|
||||
#define PTC_PARK_POS_Y 0.0F
|
||||
#define PTC_PARK_POS_Z 100.0F
|
||||
|
||||
// Probe position to probe and wait for probe to reach target temperature
|
||||
#define PTC_PROBE_POS { 90, 100 }
|
||||
#define PTC_PROBE_POS_X 90.0F
|
||||
#define PTC_PROBE_POS_Y 100.0F
|
||||
|
||||
// Enable additional compensation using hotend temperature
|
||||
// Note: this values cannot be calibrated automatically but have to be set manually
|
||||
@@ -2032,7 +1994,7 @@
|
||||
* TMCStepper library is required to use TMC stepper drivers.
|
||||
* https://github.com/teemuatlut/TMCStepper
|
||||
*/
|
||||
#if HAS_TRINAMIC_CONFIG
|
||||
#if HAS_TRINAMIC
|
||||
|
||||
#define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current
|
||||
#define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
|
||||
@@ -2319,6 +2281,14 @@
|
||||
*/
|
||||
//#define SENSORLESS_HOMING // StallGuard capable drivers only
|
||||
|
||||
/**
|
||||
* Use StallGuard2 to probe the bed with the nozzle.
|
||||
*
|
||||
* CAUTION: This could cause damage to machines that use a lead screw or threaded rod
|
||||
* to move the Z axis. Take extreme care when attempting to enable this feature.
|
||||
*/
|
||||
//#define SENSORLESS_PROBING // StallGuard capable drivers only
|
||||
|
||||
#if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING)
|
||||
// TMC2209: 0...255. TMC2130: -64...63
|
||||
#define X_STALL_SENSITIVITY 8
|
||||
@@ -2354,7 +2324,7 @@
|
||||
*/
|
||||
#define TMC_ADV() { }
|
||||
|
||||
#endif // HAS_TRINAMIC_CONFIG
|
||||
#endif // HAS_TRINAMIC
|
||||
|
||||
// @section L64XX
|
||||
|
||||
@@ -2655,123 +2625,31 @@
|
||||
#define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH
|
||||
#define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power
|
||||
#define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower
|
||||
|
||||
#define SPINDLE_LASER_FREQUENCY 2500 // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
|
||||
|
||||
/**
|
||||
* Speed / Power can be set ('M3 S') and displayed in terms of:
|
||||
* - PWM (S0 - S255)
|
||||
* - PERCENT (S0 - S100)
|
||||
* - RPM (S0 - S50000) Best for use with a spindle
|
||||
*/
|
||||
#define CUTTER_POWER_DISPLAY PWM
|
||||
|
||||
/**
|
||||
* Relative mode uses relative range (SPEED_POWER_MIN to SPEED_POWER_MAX) instead of normal range (0 to SPEED_POWER_MAX)
|
||||
* Best use with SuperPID router controller where for example S0 = 5,000 RPM and S255 = 30,000 RPM
|
||||
*/
|
||||
//#define CUTTER_POWER_RELATIVE // Set speed proportional to [SPEED_POWER_MIN...SPEED_POWER_MAX] instead of directly
|
||||
#define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power
|
||||
#define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop
|
||||
|
||||
#if ENABLED(SPINDLE_FEATURE)
|
||||
//#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction
|
||||
#define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction
|
||||
#define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed
|
||||
|
||||
#define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power
|
||||
#define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop
|
||||
|
||||
/**
|
||||
* M3/M4 uses the following equation to convert speed/power to PWM duty cycle
|
||||
* Power = ((DC / 255 * 100) - SPEED_POWER_INTERCEPT)) * (1 / SPEED_POWER_SLOPE)
|
||||
* where PWM DC varies from 0 to 255
|
||||
* The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power
|
||||
*
|
||||
* Set these required parameters for your controller
|
||||
* SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT
|
||||
* where PWM duty cycle varies from 0 to 255
|
||||
*
|
||||
* set the following for your controller (ALL MUST BE SET)
|
||||
*/
|
||||
#define SPEED_POWER_SLOPE 118.4 // SPEED_POWER_SLOPE = SPEED_POWER_MAX / 255
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 5000
|
||||
#define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM
|
||||
#define SPEED_POWER_STARTUP 25000 // The default value for speed power when M3 is called without arguments
|
||||
|
||||
#define SPEED_POWER_SLOPE 118.4
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 5000
|
||||
#define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM
|
||||
#else
|
||||
|
||||
#define SPEED_POWER_SLOPE 0.3922 // SPEED_POWER_SLOPE = SPEED_POWER_MAX / 255
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 0
|
||||
#define SPEED_POWER_MAX 100 // 0-100%
|
||||
#define SPEED_POWER_STARTUP 80 // The default value for speed power when M3 is called without arguments
|
||||
|
||||
/**
|
||||
* Enable inline laser power to be handled in the planner / stepper routines.
|
||||
* Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
|
||||
* or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
|
||||
*
|
||||
* This allows the laser to keep in perfect sync with the planner and removes
|
||||
* the powerup/down delay since lasers require negligible time.
|
||||
*/
|
||||
#define LASER_POWER_INLINE
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
/**
|
||||
* Scale the laser's power in proportion to the movement rate.
|
||||
*
|
||||
* - Sets the entry power proportional to the entry speed over the nominal speed.
|
||||
* - Ramps the power up every N steps to approximate the speed trapezoid.
|
||||
* - Due to the limited power resolution this is only approximate.
|
||||
*/
|
||||
#define LASER_POWER_INLINE_TRAPEZOID
|
||||
|
||||
/**
|
||||
* Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
|
||||
* Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
|
||||
* This is a costly calculation so this option is discouraged on 8-bit AVR boards.
|
||||
*
|
||||
* LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
|
||||
* board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
|
||||
* Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_TRAPEZOID_CONT
|
||||
|
||||
/**
|
||||
* Stepper iterations between power updates. Increase this value if the board
|
||||
* can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
|
||||
* Disable (or set to 0) to recalculate power on every stepper iteration.
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
|
||||
|
||||
/**
|
||||
* Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
|
||||
*/
|
||||
//#define LASER_MOVE_POWER
|
||||
|
||||
#if ENABLED(LASER_MOVE_POWER)
|
||||
// Turn off the laser on G0 moves with no power parameter.
|
||||
// If a power parameter is provided, use that instead.
|
||||
//#define LASER_MOVE_G0_OFF
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Inline flag inverted
|
||||
*
|
||||
* WARNING: M5 will NOT turn off the laser unless another move
|
||||
* is done (so G-code files must end with 'M5 I').
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_INVERT
|
||||
|
||||
/**
|
||||
* Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
|
||||
*
|
||||
* The laser might do some weird things, so only enable this
|
||||
* feature if you understand the implications.
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_CONTINUOUS
|
||||
|
||||
#else
|
||||
|
||||
#define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
|
||||
#define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
|
||||
|
||||
#endif
|
||||
#define SPEED_POWER_SLOPE 0.3922
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 10
|
||||
#define SPEED_POWER_MAX 100 // 0-100%
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -2887,12 +2765,6 @@
|
||||
*/
|
||||
#define FASTER_GCODE_PARSER
|
||||
|
||||
#if ENABLED(FASTER_GCODE_PARSER)
|
||||
//#define GCODE_QUOTED_STRINGS // Support for quoted string parameters
|
||||
#endif
|
||||
|
||||
//#define GCODE_CASE_INSENSITIVE // Accept G-code sent to the firmware in lowercase
|
||||
|
||||
/**
|
||||
* CNC G-code options
|
||||
* Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.
|
||||
@@ -3092,7 +2964,7 @@
|
||||
#define MAX7219_LOAD_PIN 44
|
||||
|
||||
//#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix
|
||||
#define MAX7219_INIT_TEST 2 // Test pattern at startup: 0=none, 1=sweep, 2=spiral
|
||||
#define MAX7219_INIT_TEST 2 // Do a test pattern at initialization (Set to 2 for spiral)
|
||||
#define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain.
|
||||
#define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°)
|
||||
// connector at: right=0 bottom=-90 top=90 left=180
|
||||
@@ -3132,19 +3004,11 @@
|
||||
//#define ESP3D_WIFISUPPORT // ESP3D Library WiFi management (https://github.com/luc-github/ESP3DLib)
|
||||
|
||||
#if EITHER(WIFISUPPORT, ESP3D_WIFISUPPORT)
|
||||
#define WIFI_SSID "Wifi SSID"
|
||||
#define WIFI_PWD "Wifi Password"
|
||||
//#define WEBSUPPORT // Start a webserver (which may include auto-discovery)
|
||||
//#define OTASUPPORT // Support over-the-air firmware updates
|
||||
//#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host
|
||||
|
||||
/**
|
||||
* To set a default WiFi SSID / Password, create a file called Configuration_Secure.h with
|
||||
* the following defines, customized for your network. This specific file is excluded via
|
||||
* .gitignore to prevent it from accidentally leaking to the public.
|
||||
*
|
||||
* #define WIFI_SSID "WiFi SSID"
|
||||
* #define WIFI_PWD "WiFi Password"
|
||||
*/
|
||||
//#include "Configuration_Secure.h" // External file with WiFi SSID / Password
|
||||
#endif
|
||||
|
||||
/**
|
||||
+242
-219
@@ -1,30 +1,48 @@
|
||||
//#define PetsfangMicroswiss
|
||||
//#define BondtechBMG
|
||||
//#define CR10SPro_GearedExtruder
|
||||
//#define E3DV6
|
||||
// If you have a trex 3, stock is this option plus 2208 on all axis. None in spreadcycle.
|
||||
#define TREX3
|
||||
|
||||
//#define FilamentSensorStd
|
||||
//#define FilamentSensorLerdge
|
||||
//#define FilamentEncoder
|
||||
// If you have a trex 3 that was upgraded from a 2+ with the kit, modifies home position and offsets.
|
||||
//#define TREX3_UPGRADE
|
||||
|
||||
//#define STOCK_2208 // V2 Stock Board with TMC2208 Drivers
|
||||
//#define SKR13 // 32 bit board - assumes 2208 drivers
|
||||
//#define SKR14
|
||||
//#define SKR14Turbo
|
||||
//#define SKR_2209
|
||||
//#define E_8825
|
||||
//#define SKR_UART // Configure SKR board with drivers in UART mode
|
||||
//Stock 2+ X is a 4988, all options off defaults to this
|
||||
//#define X_2208
|
||||
//#define X_Spreadcycle
|
||||
//#define X_S109
|
||||
|
||||
//#define SX2 // Small formfactor 200mm machine
|
||||
// Y all options off defaults to 2+ 8825 / 3 2208
|
||||
//#define Y_2208 // Highly recommended as large prints with high mass can cause layer shifts with stealthchop at high speed
|
||||
//#define Y_Spreadcycle
|
||||
//#define Y_4988 // Some machines shipped with 4988 drivers across the board. Set this if you arent sure what you have and all the drivers look identical
|
||||
//#define Y_S109
|
||||
|
||||
#define DUAL_Z
|
||||
//#define GRAPHICSLCD
|
||||
//#define UBL
|
||||
//Stock 2+ Z is a 8825, all options off defaults to this
|
||||
//#define Z_2208 // NOT Recommended! Dual stepper current draw is above the recommended limit for this driver
|
||||
//#define Z_4988 // Some machines shipped with 4988 drivers across the board. Set this if you arent sure what you have and all the drivers look identical
|
||||
//#define Z_Spreadcycle
|
||||
//#define Z_S109
|
||||
|
||||
//Stock 2+ Z is a 4988, all options off defaults to this
|
||||
//#define E_2208 // Not Recommended! Stealthchop mode faults with linear advance
|
||||
//#define E_Spreadcycle
|
||||
//#define E_S109
|
||||
|
||||
#define BedAC
|
||||
|
||||
#define tallVersion
|
||||
|
||||
//#define ABL_Bilinear
|
||||
/*
|
||||
* Enables a filament sensor plugged into the laser pin. Disables the laser
|
||||
*/
|
||||
//#define FilamentSensor // Standard older TM3D runout sensor
|
||||
//#define lerdgeFilSensor // Newer inverted logic TM3D Runout Sensor
|
||||
//#define filamentEncoder
|
||||
|
||||
//#define autoCalibrationKit
|
||||
|
||||
|
||||
#if ANY(SKR13, SKR14, SKR14Turbo)
|
||||
#define SKRLPCBoard
|
||||
#endif
|
||||
//////////////////////////////////DO not edit below here unless you know what youre doing! //////////////////////////////////
|
||||
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
@@ -48,9 +66,23 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#if DISABLED(SKRLPCBoard)
|
||||
#define Y_STOP_PIN 14
|
||||
// The TREX2+ upgraded to the 3 enables most of the same options, simplify here
|
||||
#if ENABLED(TREX3_UPGRADE)
|
||||
#define TREX3
|
||||
#endif
|
||||
|
||||
#if ENABLED(TREX3)
|
||||
#if DISABLED(X_S109)
|
||||
#define X_2208
|
||||
#endif
|
||||
#if DISABLED(Y_S109)
|
||||
#define Y_2208
|
||||
#endif
|
||||
#define Z_2208
|
||||
#define E_2208
|
||||
#define FilamentSensor
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Configuration.h
|
||||
*
|
||||
@@ -118,19 +150,17 @@
|
||||
// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
|
||||
#define SHOW_BOOTSCREEN
|
||||
|
||||
#if ENABLED(GRAPHICSLCD)
|
||||
// Show the bitmap in Marlin/_Bootscreen.h on startup.
|
||||
#define SHOW_CUSTOM_BOOTSCREEN
|
||||
|
||||
// Show the bitmap in Marlin/_Statusscreen.h on the status screen.
|
||||
#define CUSTOM_STATUS_SCREEN_IMAGE
|
||||
#endif
|
||||
|
||||
// @section machine
|
||||
|
||||
/**
|
||||
* Select the serial port on the board to use for communication with the host.
|
||||
* This allows the connection of wireless adapters (for instance) to non-default port pins.
|
||||
* Serial port -1 is the USB emulated serial port, if available.
|
||||
* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
|
||||
*
|
||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
@@ -139,11 +169,13 @@
|
||||
|
||||
/**
|
||||
* Select a secondary serial port on the board to use for communication with the host.
|
||||
* This allows the connection of wireless adapters (for instance) to non-default port pins.
|
||||
* Serial port -1 is the USB emulated serial port, if available.
|
||||
*
|
||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
*/
|
||||
#if ENABLED(SKRLPCBoard)
|
||||
#define SERIAL_PORT_2 -1
|
||||
#endif
|
||||
//#define SERIAL_PORT_2 -1
|
||||
|
||||
/**
|
||||
* This setting determines the communication speed of the printer.
|
||||
*
|
||||
@@ -160,25 +192,23 @@
|
||||
|
||||
// Choose the name from boards.h that matches your setup
|
||||
#ifndef MOTHERBOARD
|
||||
#if ENABLED(SKR13)
|
||||
#define MOTHERBOARD BOARD_BTT_SKR_V1_3
|
||||
#elif ENABLED(SKR14)
|
||||
#define MOTHERBOARD BOARD_BTT_SKR_V1_4
|
||||
#elif ENABLED(SKR14Turbo)
|
||||
#define MOTHERBOARD BOARD_BTT_SKR_V1_4_TURBO
|
||||
#else
|
||||
#define MOTHERBOARD BOARD_RAMPS_14_EFB
|
||||
#endif
|
||||
#if ENABLED(TREX3)
|
||||
#define MOTHERBOARD BOARD_FORMBOT_TREX3
|
||||
#else
|
||||
#define MOTHERBOARD BOARD_FORMBOT_TREX2PLUS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Name displayed in the LCD "Ready" message and Info menu
|
||||
#if ENABLED(SX2)
|
||||
#define CUSTOM_MACHINE_NAME "TM3D SX2"
|
||||
#else
|
||||
#define CUSTOM_MACHINE_NAME "TM3D SX4"
|
||||
// Optional custom name for your RepStrap or other custom machine
|
||||
// Displayed in the LCD "Ready" message
|
||||
#if ENABLED(TREX3_UPGRADE)
|
||||
#define CUSTOM_MACHINE_TIME "T-REX 3(u)"
|
||||
#elif ENABLED(TREX3)
|
||||
#define CUSTOM_MACHINE_NAME "T-REX 3"
|
||||
#else
|
||||
#define CUSTOM_MACHINE_NAME "T-REX 2+"
|
||||
#endif
|
||||
|
||||
|
||||
// Printer's unique ID, used by some programs to differentiate between machines.
|
||||
// Choose your own or use a service like http://www.uuidgenerator.net/version4
|
||||
//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
|
||||
@@ -187,7 +217,7 @@
|
||||
|
||||
// This defines the number of extruders
|
||||
// :[1, 2, 3, 4, 5, 6, 7, 8]
|
||||
#define EXTRUDERS 1
|
||||
#define EXTRUDERS 2
|
||||
|
||||
// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
|
||||
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
|
||||
@@ -352,7 +382,12 @@
|
||||
// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
|
||||
// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
|
||||
// For the other hotends it is their distance from the extruder 0 hotend.
|
||||
//#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle
|
||||
#if ENABLED(TREX3)
|
||||
#define HOTEND_OFFSET_X {0.0, 438.5} // (mm) relative X-offset for each nozzle
|
||||
#else
|
||||
#define HOTEND_OFFSET_X {0.0, 442.0} // (mm) relative X-offset for each nozzle
|
||||
#endif
|
||||
|
||||
//#define HOTEND_OFFSET_Y { 0.0, 5.00 } // (mm) relative Y-offset for each nozzle
|
||||
//#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle
|
||||
|
||||
@@ -406,7 +441,6 @@
|
||||
* 331 : (3.3V scaled thermistor 1 table for MEGA)
|
||||
* 332 : (3.3V scaled thermistor 1 table for DUE)
|
||||
* 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
|
||||
* 202 : 200k thermistor - Copymaster 3D
|
||||
* 3 : Mendel-parts thermistor (4.7k pullup)
|
||||
* 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
|
||||
* 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan & J-Head) (4.7k pullup)
|
||||
@@ -451,19 +485,24 @@
|
||||
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
|
||||
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
|
||||
*/
|
||||
#if ENABLED(E3DV6)
|
||||
#define TEMP_SENSOR_0 5
|
||||
#if ENABLED(TREX3)
|
||||
#define TEMP_SENSOR_0 61
|
||||
#define TEMP_SENSOR_1 61
|
||||
#else
|
||||
#define TEMP_SENSOR_0 1
|
||||
#define TEMP_SENSOR_1 1
|
||||
#endif
|
||||
#define TEMP_SENSOR_1 0
|
||||
#define TEMP_SENSOR_2 0
|
||||
#define TEMP_SENSOR_3 0
|
||||
#define TEMP_SENSOR_4 0
|
||||
#define TEMP_SENSOR_5 0
|
||||
#define TEMP_SENSOR_6 0
|
||||
#define TEMP_SENSOR_7 0
|
||||
#define TEMP_SENSOR_BED 11
|
||||
#if(ENABLED(BedAC))
|
||||
#define TEMP_SENSOR_BED 11
|
||||
#else
|
||||
#define TEMP_SENSOR_BED 0
|
||||
#endif
|
||||
#define TEMP_SENSOR_PROBE 0
|
||||
#define TEMP_SENSOR_CHAMBER 0
|
||||
|
||||
@@ -476,11 +515,11 @@
|
||||
//#define TEMP_SENSOR_1_AS_REDUNDANT
|
||||
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
|
||||
|
||||
#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109
|
||||
#define TEMP_RESIDENCY_TIME 3 // (seconds) Time to wait for hotend to "settle" in M109
|
||||
#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
|
||||
#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
|
||||
|
||||
#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190
|
||||
#define TEMP_BED_RESIDENCY_TIME 5 // (seconds) Time to wait for bed to "settle" in M190
|
||||
#define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
|
||||
#define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
|
||||
|
||||
@@ -499,15 +538,20 @@
|
||||
// Above this temperature the heater will be switched off.
|
||||
// This can protect components from overheating, but NOT from shorts and failures.
|
||||
// (Use MINTEMP for thermistor short/failure protection.)
|
||||
#define HEATER_0_MAXTEMP 305
|
||||
#define HEATER_1_MAXTEMP 275
|
||||
#if ENABLED(TREX3)
|
||||
#define HEATER_0_MAXTEMP 350
|
||||
#define HEATER_1_MAXTEMP 350
|
||||
#else
|
||||
#define HEATER_0_MAXTEMP 410
|
||||
#define HEATER_1_MAXTEMP 295
|
||||
#endif
|
||||
#define HEATER_2_MAXTEMP 275
|
||||
#define HEATER_3_MAXTEMP 275
|
||||
#define HEATER_4_MAXTEMP 275
|
||||
#define HEATER_5_MAXTEMP 275
|
||||
#define HEATER_6_MAXTEMP 275
|
||||
#define HEATER_7_MAXTEMP 275
|
||||
#define BED_MAXTEMP 125
|
||||
#define BED_MAXTEMP 150
|
||||
|
||||
//===========================================================================
|
||||
//============================= PID Settings ================================
|
||||
@@ -525,7 +569,7 @@
|
||||
//#define PID_DEBUG // Sends debug data to the serial port.
|
||||
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
|
||||
//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
|
||||
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
|
||||
#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
|
||||
// Set/get with gcode: M301 E[extruder number, 0-2]
|
||||
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
|
||||
// is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
|
||||
@@ -533,14 +577,14 @@
|
||||
// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
|
||||
|
||||
// Ultimaker
|
||||
#if ENABLED(PetsfangMicroswiss)
|
||||
#define DEFAULT_Kp 18.74
|
||||
#define DEFAULT_Ki 0.71
|
||||
#define DEFAULT_Kd 123.56
|
||||
#if ENABLED(TREX3)
|
||||
#define DEFAULT_Kp 14.64
|
||||
#define DEFAULT_Ki 1.08
|
||||
#define DEFAULT_Kd 53.36
|
||||
#else
|
||||
#define DEFAULT_Kp 10.59
|
||||
#define DEFAULT_Ki 0.37
|
||||
#define DEFAULT_Kd 75.24
|
||||
#define DEFAULT_Kp 22.2
|
||||
#define DEFAULT_Ki 1.08
|
||||
#define DEFAULT_Kd 114
|
||||
#endif
|
||||
// MakerGear
|
||||
//#define DEFAULT_Kp 7.0
|
||||
@@ -650,7 +694,7 @@
|
||||
|
||||
// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
|
||||
// either in the usual order or reversed
|
||||
#define COREXY
|
||||
//#define COREXY
|
||||
//#define COREXZ
|
||||
//#define COREYZ
|
||||
//#define COREYX
|
||||
@@ -669,7 +713,7 @@
|
||||
#define USE_XMIN_PLUG
|
||||
//#define USE_YMIN_PLUG
|
||||
#define USE_ZMIN_PLUG
|
||||
//#define USE_XMAX_PLUG
|
||||
#define USE_XMAX_PLUG
|
||||
#define USE_YMAX_PLUG
|
||||
//#define USE_ZMAX_PLUG
|
||||
|
||||
@@ -700,10 +744,10 @@
|
||||
#endif
|
||||
|
||||
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
|
||||
#define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
|
||||
#define X_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
|
||||
#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
|
||||
#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
|
||||
#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
|
||||
#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
|
||||
#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
|
||||
#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
|
||||
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the probe.
|
||||
@@ -724,64 +768,38 @@
|
||||
* TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
|
||||
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
|
||||
*/
|
||||
|
||||
#if ENABLED(SKRLPCBoard, E_8825)
|
||||
#if ENABLED(X_2208)
|
||||
#define X_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#define X2_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#else
|
||||
#define X_DRIVER_TYPE A4988
|
||||
#define X2_DRIVER_TYPE A4988
|
||||
#endif
|
||||
#if ENABLED(Y_2208)
|
||||
#define Y_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#elif ENABLED(Y_4988)
|
||||
#define Y_DRIVER_TYPE A4988
|
||||
#else
|
||||
#define Y_DRIVER_TYPE DRV8825
|
||||
#endif
|
||||
#if ENABLED(Z_2208)
|
||||
#define Z_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#elif ENABLED(Z_4988)
|
||||
#define Z_DRIVER_TYPE A4988
|
||||
#else
|
||||
#define Z_DRIVER_TYPE DRV8825
|
||||
#endif
|
||||
//#define Y2_DRIVER_TYPE A4988
|
||||
//#define Z2_DRIVER_TYPE A4988
|
||||
//#define Z3_DRIVER_TYPE A4988
|
||||
//#define Z4_DRIVER_TYPE A4988
|
||||
#if ENABLED(E_2208)
|
||||
#define E0_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#define E1_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#else
|
||||
#define E0_DRIVER_TYPE DRV8825
|
||||
#define E1_DRIVER_TYPE DRV8825
|
||||
#endif
|
||||
|
||||
#if ANY(SKRLPCBoard, STOCK_2208) && DISABLED(SKR_UART)
|
||||
#if ENABLED(SKR_2209)
|
||||
#define X_DRIVER_TYPE TMC2209_STANDALONE
|
||||
#define Y_DRIVER_TYPE TMC2209_STANDALONE
|
||||
#define Z_DRIVER_TYPE TMC2209_STANDALONE
|
||||
#define Z2_DRIVER_TYPE TMC2209_STANDALONE
|
||||
#if DISABLED(E_8825)
|
||||
#define E0_DRIVER_TYPE TMC2209_STANDALONE
|
||||
#define E1_DRIVER_TYPE TMC2209_STANDALONE
|
||||
#endif
|
||||
#else
|
||||
#define X_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#define Y_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#define Z_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#define Z2_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#if DISABLED(E_8825)
|
||||
#define E0_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#define E1_DRIVER_TYPE TMC2208_STANDALONE
|
||||
#endif
|
||||
#endif
|
||||
#elif ENABLED(SKRLPCBoard, SKR_UART)
|
||||
#if ENABLED(SKR_2209)
|
||||
#define X_DRIVER_TYPE TMC2209
|
||||
#define Y_DRIVER_TYPE TMC2209
|
||||
#define Z_DRIVER_TYPE TMC2209
|
||||
#define Z2_DRIVER_TYPE TMC2209
|
||||
#if DISABLED(E_8825)
|
||||
#define E0_DRIVER_TYPE TMC2209
|
||||
#define E1_DRIVER_TYPE TMC2209
|
||||
#endif
|
||||
#else
|
||||
#define X_DRIVER_TYPE TMC2208
|
||||
#define Y_DRIVER_TYPE TMC2208
|
||||
#define Z_DRIVER_TYPE TMC2208
|
||||
#define Z2_DRIVER_TYPE TMC2208
|
||||
#if DISABLED(E_8825)
|
||||
#define E0_DRIVER_TYPE TMC2208
|
||||
#define E1_DRIVER_TYPE TMC2208
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
#define X_DRIVER_TYPE A4988
|
||||
#define Y_DRIVER_TYPE A4988
|
||||
#define Z_DRIVER_TYPE A4988
|
||||
#define Z2_DRIVER_TYPE A4988
|
||||
#define E0_DRIVER_TYPE A4988
|
||||
#define E1_DRIVER_TYPE A4988
|
||||
#endif
|
||||
//#define X2_DRIVER_TYPE A4988
|
||||
//#define Y2_DRIVER_TYPE A4988
|
||||
//#define Z3_DRIVER_TYPE A4988
|
||||
//#define Z4_DRIVER_TYPE A4988
|
||||
//#define E2_DRIVER_TYPE A4988
|
||||
//#define E3_DRIVER_TYPE A4988
|
||||
//#define E4_DRIVER_TYPE A4988
|
||||
@@ -805,7 +823,7 @@
|
||||
*
|
||||
* :[2,3,4,5,6,7]
|
||||
*/
|
||||
#define ENDSTOP_NOISE_THRESHOLD 2
|
||||
//#define ENDSTOP_NOISE_THRESHOLD 2
|
||||
|
||||
//=============================================================================
|
||||
//============================== Movement Settings ============================
|
||||
@@ -832,26 +850,37 @@
|
||||
* Override with M92
|
||||
* X, Y, Z, E0 [, E1[, E2...]]
|
||||
*/
|
||||
#if ENABLED(BondtechBMG)
|
||||
#define EStepsmm 415
|
||||
#elif ENABLED(CR10SPro_GearedExtruder)
|
||||
#define EStepsmm 140
|
||||
|
||||
|
||||
#if(ENABLED(Y_2208) || ENABLED(Y_4988) || ENABLED(Y_S109))
|
||||
#define Y_STEPSMM 80
|
||||
#else
|
||||
#define EStepsmm 100.3
|
||||
#define Y_STEPSMM 160
|
||||
#endif
|
||||
|
||||
#if(ENABLED(Z_2208) || ENABLED(Z_4988))
|
||||
#define Z_STEPSMM 800
|
||||
#else
|
||||
#define Z_STEPSMM 1600
|
||||
#endif
|
||||
|
||||
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, Y_STEPSMM, Z_STEPSMM, 93 }
|
||||
|
||||
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, EStepsmm }
|
||||
/**
|
||||
* Default Max Feed Rate (mm/s)
|
||||
* Override with M203
|
||||
* X, Y, Z, E0 [, E1[, E2...]]
|
||||
*/
|
||||
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 70 }
|
||||
#if ENABLED(Y_2208) && DISABLED(Y_Spreadcycle)
|
||||
#define Y_MAXFEED 100
|
||||
#else
|
||||
#define Y_MAXFEED 150
|
||||
#endif
|
||||
#define DEFAULT_MAX_FEEDRATE { 200, Y_MAXFEED, 8, 75 }
|
||||
|
||||
#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
|
||||
#if ENABLED(LIMITED_MAX_FR_EDITING)
|
||||
#define MAX_FEEDRATE_EDIT_VALUES { 1000, 1000, 10, 150 } // ...or, set your own edit limits
|
||||
#define MAX_FEEDRATE_EDIT_VALUES { 300, 200, 15, 150 } // ...or, set your own edit limits
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -860,11 +889,11 @@
|
||||
* Override with M201
|
||||
* X, Y, Z, E0 [, E1[, E2...]]
|
||||
*/
|
||||
#define DEFAULT_MAX_ACCELERATION { 1500, 1500, 50, 2000 }
|
||||
#define DEFAULT_MAX_ACCELERATION { 750, 500, 400, 3000 }
|
||||
|
||||
#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
|
||||
#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
|
||||
#define MAX_ACCEL_EDIT_VALUES { 2500, 2500, 125, 5000 } // ...or, set your own edit limits
|
||||
#define MAX_ACCEL_EDIT_VALUES { 1500, 1500, 800, 5000 } // ...or, set your own edit limits
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -875,9 +904,9 @@
|
||||
* M204 R Retract Acceleration
|
||||
* M204 T Travel Acceleration
|
||||
*/
|
||||
#define DEFAULT_ACCELERATION 1000 // X, Y, Z and E acceleration for printing moves
|
||||
#define DEFAULT_RETRACT_ACCELERATION 1500 // E acceleration for retracts
|
||||
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
|
||||
#define DEFAULT_ACCELERATION 500 // X, Y, Z and E acceleration for printing moves
|
||||
#define DEFAULT_RETRACT_ACCELERATION 2000 // E acceleration for retracts
|
||||
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
|
||||
|
||||
/**
|
||||
* Default Jerk limits (mm/s)
|
||||
@@ -887,7 +916,7 @@
|
||||
* When changing speed and direction, if the difference is less than the
|
||||
* value set here, it may happen instantaneously.
|
||||
*/
|
||||
#define CLASSIC_JERK
|
||||
//#define CLASSIC_JERK
|
||||
#if ENABLED(CLASSIC_JERK)
|
||||
#define DEFAULT_XJERK 10.0
|
||||
#define DEFAULT_YJERK 10.0
|
||||
@@ -1066,17 +1095,15 @@
|
||||
*
|
||||
* Specify a Probe position as { X, Y, Z }
|
||||
*/
|
||||
#if ENABLED(PetsfangMicroswiss)
|
||||
#define NOZZLE_TO_PROBE_OFFSET { -42, -5, 0 }
|
||||
#elif ENABLED(E3DV6)
|
||||
#define NOZZLE_TO_PROBE_OFFSET { 36, 15, 0 }
|
||||
#else
|
||||
#define NOZZLE_TO_PROBE_OFFSET { 37, -10, 0 }
|
||||
#endif
|
||||
|
||||
#if ENABLED(TREX3)
|
||||
#define NOZZLE_TO_PROBE_OFFSET { -3, 31, 0 }
|
||||
#else
|
||||
#define NOZZLE_TO_PROBE_OFFSET { -7, 29, 0 }
|
||||
#endif
|
||||
// Most probes should stay away from the edges of the bed, but
|
||||
// with NOZZLE_AS_PROBE this can be negative for a wider probing area.
|
||||
#define MIN_PROBE_EDGE 5
|
||||
#define MIN_PROBE_EDGE 10
|
||||
|
||||
// X and Y axis travel speed (mm/m) between probes
|
||||
#define XY_PROBE_SPEED 5000
|
||||
@@ -1113,10 +1140,10 @@
|
||||
* Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle.
|
||||
* But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle.
|
||||
*/
|
||||
#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow
|
||||
#define Z_CLEARANCE_DEPLOY_PROBE 5 // Z Clearance for Deploy/Stow
|
||||
#define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points
|
||||
#define Z_CLEARANCE_MULTI_PROBE 5 // Z Clearance between multiple probes
|
||||
//#define Z_AFTER_PROBING 5 // Z position after probing is done
|
||||
#define Z_AFTER_PROBING 5 // Z position after probing is done
|
||||
|
||||
#define Z_PROBE_LOW_POINT -3 // Farthest distance below the trigger-point to go before stopping
|
||||
|
||||
@@ -1125,7 +1152,7 @@
|
||||
#define Z_PROBE_OFFSET_RANGE_MAX 9
|
||||
|
||||
// Enable the M48 repeatability test to test probe accuracy
|
||||
//#define Z_MIN_PROBE_REPEATABILITY_TEST
|
||||
#define Z_MIN_PROBE_REPEATABILITY_TEST
|
||||
|
||||
// Before deploy/stow pause for user confirmation
|
||||
//#define PAUSE_BEFORE_DEPLOY_STOW
|
||||
@@ -1172,25 +1199,31 @@
|
||||
// @section machine
|
||||
|
||||
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
|
||||
#if ANY(SKRLPCBoard, STOCK_2208)
|
||||
#if ENABLED(X_2208)
|
||||
#define INVERT_X_DIR true
|
||||
#define INVERT_Y_DIR true
|
||||
#define INVERT_Z_DIR true
|
||||
#else
|
||||
#define INVERT_X_DIR false
|
||||
#define INVERT_Y_DIR false
|
||||
#define INVERT_Z_DIR false
|
||||
#endif
|
||||
|
||||
#if ENABLED(Y_2208)
|
||||
#define INVERT_Y_DIR true
|
||||
#else
|
||||
#define INVERT_Y_DIR false
|
||||
#endif
|
||||
#if ENABLED(Z_2208)
|
||||
#define INVERT_Z_DIR false
|
||||
#else
|
||||
#define INVERT_Z_DIR true
|
||||
#endif
|
||||
// @section extruder
|
||||
|
||||
// For direct drive extruder v9 set to true, for geared extruder set to false.
|
||||
#if (ENABLED(BondtechBMG, CR10SPro_GearedExtruder) && DISABLED(SKRLPCBoard)) || (DISABLED(BondtechBM, CR10SPro_GearedExtruderG) && ANY(SKRLPCBoard, STOCK_2208))
|
||||
#if ENABLED(E_2208) && DISABLED(TREX3)
|
||||
#define INVERT_E0_DIR true
|
||||
#define INVERT_E1_DIR false
|
||||
#else
|
||||
#define INVERT_E0_DIR false
|
||||
#define INVERT_E1_DIR true
|
||||
#endif
|
||||
#define INVERT_E1_DIR false
|
||||
#define INVERT_E2_DIR false
|
||||
#define INVERT_E3_DIR false
|
||||
#define INVERT_E4_DIR false
|
||||
@@ -1218,31 +1251,29 @@
|
||||
// @section machine
|
||||
|
||||
// The size of the print bed
|
||||
#if ENABLED(PetsfangMicroswiss)
|
||||
#define PetsfangModifier 10
|
||||
#else
|
||||
#define PetsfangModifier 0
|
||||
#endif
|
||||
|
||||
#if ENABLED(SX2)
|
||||
#define X_BED_SIZE 248 - PetsfangModifier
|
||||
#define Y_BED_SIZE 238 - PetsfangModifier
|
||||
#else
|
||||
#define X_BED_SIZE 398 - PetsfangModifier
|
||||
#define Y_BED_SIZE 390 - PetsfangModifier
|
||||
#endif
|
||||
#define X_BED_SIZE 400
|
||||
#define Y_BED_SIZE 400
|
||||
|
||||
// Travel limits (mm) after homing, corresponding to endstop positions.
|
||||
#define X_MIN_POS 0
|
||||
#define Y_MIN_POS 0
|
||||
#define Z_MIN_POS 0
|
||||
#define X_MAX_POS X_BED_SIZE
|
||||
#define Y_MAX_POS Y_BED_SIZE
|
||||
#if DISABLED(SX2)
|
||||
#define Z_MAX_POS 500
|
||||
#if DISABLED(TREX3) || ENABLED(TREX3_UPGRADE)
|
||||
#define X_MIN_POS -42
|
||||
#define Y_MIN_POS 0
|
||||
#define Z_MIN_POS -3
|
||||
#define X_MAX_POS 450
|
||||
#define Y_MAX_POS Y_BED_SIZE
|
||||
#else
|
||||
#define Z_MAX_POS 250
|
||||
#define X_MIN_POS -47
|
||||
#define Y_MIN_POS 0
|
||||
#define Z_MIN_POS -3
|
||||
#define X_MAX_POS 460
|
||||
#define Y_MAX_POS Y_BED_SIZE
|
||||
#endif
|
||||
#if(ENABLED(tallVersion))
|
||||
#define Z_MAX_POS 700
|
||||
#else
|
||||
#define Z_MAX_POS 500
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Software Endstops
|
||||
*
|
||||
@@ -1280,13 +1311,16 @@
|
||||
* For other boards you may need to define FIL_RUNOUT_PIN, FIL_RUNOUT2_PIN, etc.
|
||||
* By default the firmware assumes HIGH=FILAMENT PRESENT.
|
||||
*/
|
||||
#if ANY(FilamentSensorStd, FilamentSensorLerdge, FilamentEncoder)
|
||||
#if ANY(FilamentSensor, filamentEncoder, lerdgeFilSensor)
|
||||
#define FILAMENT_RUNOUT_SENSOR
|
||||
#endif
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
|
||||
#define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
|
||||
#if ENABLED(FilamentSensorLerdge)
|
||||
#if ENABLED(TREX3)
|
||||
#define NUM_RUNOUT_SENSORS 2
|
||||
#else
|
||||
#define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
|
||||
#endif
|
||||
#if ENABLED(lerdgeFilSensor) || ENABLED(TREX3)
|
||||
#define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
|
||||
#else
|
||||
#define FIL_RUNOUT_INVERTING true // set to true to invert the logic of the sensor.
|
||||
@@ -1294,9 +1328,6 @@
|
||||
#define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins.
|
||||
//#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins.
|
||||
|
||||
#if DISABLED(SKRLPCBoard)
|
||||
#define FIL_RUNOUT_PIN 2
|
||||
#endif
|
||||
// Set one or more commands to execute on filament runout.
|
||||
// (After 'M412 H' Marlin will ask the host to handle the process.)
|
||||
#define FILAMENT_RUNOUT_SCRIPT "M600"
|
||||
@@ -1304,7 +1335,7 @@
|
||||
// After a runout is detected, continue printing this length of filament
|
||||
// before executing the runout script. Useful for a sensor at the end of
|
||||
// a feed tube. Requires 4 bytes SRAM per sensor, plus 4 bytes overhead.
|
||||
#if ENABLED(FilamentEncoder)
|
||||
#if ENABLED(filamentEncoder)
|
||||
#define FILAMENT_RUNOUT_DISTANCE_MM 15
|
||||
#else
|
||||
#define FILAMENT_RUNOUT_DISTANCE_MM 5
|
||||
@@ -1314,7 +1345,7 @@
|
||||
// Enable this option to use an encoder disc that toggles the runout pin
|
||||
// as the filament moves. (Be sure to set FILAMENT_RUNOUT_DISTANCE_MM
|
||||
// large enough to avoid false positives.)
|
||||
#if ENABLED(FilamentEncoder)
|
||||
#if ENABLED(filamentEncoder)
|
||||
#define FILAMENT_MOTION_SENSOR
|
||||
#endif
|
||||
#endif
|
||||
@@ -1360,7 +1391,7 @@
|
||||
*/
|
||||
//#define AUTO_BED_LEVELING_3POINT
|
||||
//#define AUTO_BED_LEVELING_LINEAR
|
||||
#if DISABLED(UBL)
|
||||
#if ENABLED(ABL_Bilinear)
|
||||
#define AUTO_BED_LEVELING_BILINEAR
|
||||
#else
|
||||
#define AUTO_BED_LEVELING_UBL
|
||||
@@ -1410,11 +1441,7 @@
|
||||
#if EITHER(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR)
|
||||
|
||||
// Set the number of grid points per dimension.
|
||||
#if ENABLED(SX2)
|
||||
#define GRID_MAX_POINTS_X 5
|
||||
#else
|
||||
#define GRID_MAX_POINTS_X 10
|
||||
#endif
|
||||
#define GRID_MAX_POINTS_X 11
|
||||
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
|
||||
|
||||
// Probe along the Y axis, advancing X after each column
|
||||
@@ -1444,16 +1471,16 @@
|
||||
//========================= Unified Bed Leveling ============================
|
||||
//===========================================================================
|
||||
|
||||
//#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh
|
||||
#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh
|
||||
|
||||
#define MESH_INSET 1 // Set Mesh bounds as an inset region of the bed
|
||||
#define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited.
|
||||
#define MESH_INSET 3 // Set Mesh bounds as an inset region of the bed
|
||||
#define GRID_MAX_POINTS_X 15 // Don't use more than 15 points per axis, implementation limited.
|
||||
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
|
||||
|
||||
#define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle
|
||||
#define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500
|
||||
|
||||
//#define UBL_Z_RAISE_WHEN_OFF_MESH 2.5 // When the nozzle is off the mesh, this value is used
|
||||
#define UBL_Z_RAISE_WHEN_OFF_MESH 0.0 // When the nozzle is off the mesh, this value is used
|
||||
// as the Z-Height correction value.
|
||||
|
||||
#elif ENABLED(MESH_BED_LEVELING)
|
||||
@@ -1474,12 +1501,12 @@
|
||||
* Add a bed leveling sub-menu for ABL or MBL.
|
||||
* Include a guided procedure if manual probing is enabled.
|
||||
*/
|
||||
#define LCD_BED_LEVELING
|
||||
//#define LCD_BED_LEVELING
|
||||
|
||||
#if ENABLED(LCD_BED_LEVELING)
|
||||
#define MESH_EDIT_Z_STEP 0.025 // (mm) Step size while manually probing Z axis.
|
||||
#define LCD_PROBE_Z_RANGE 4 // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment
|
||||
#define MESH_EDIT_MENU // Add a menu to edit mesh points
|
||||
//#define MESH_EDIT_MENU // Add a menu to edit mesh points
|
||||
#endif
|
||||
|
||||
// Add a menu item to move between bed corners for manual bed adjustment
|
||||
@@ -1489,7 +1516,7 @@
|
||||
#define LEVEL_CORNERS_INSET_LFRB { 30, 30, 30, 30 } // (mm) Left, Front, Right, Back insets
|
||||
#define LEVEL_CORNERS_HEIGHT 0.0 // (mm) Z height of nozzle at leveling points
|
||||
#define LEVEL_CORNERS_Z_HOP 4.0 // (mm) Z height of nozzle between leveling points
|
||||
#define LEVEL_CENTER_TOO // Move to the center after the last corner
|
||||
//#define LEVEL_CENTER_TOO // Move to the center after the last corner
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -1508,7 +1535,7 @@
|
||||
// For DELTA this is the top-center of the Cartesian print volume.
|
||||
//#define MANUAL_X_HOME_POS 0
|
||||
//#define MANUAL_Y_HOME_POS 0
|
||||
//#define MANUAL_Z_HOME_POS 0
|
||||
#define MANUAL_Z_HOME_POS 0
|
||||
|
||||
// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
|
||||
//
|
||||
@@ -1527,8 +1554,8 @@
|
||||
#endif
|
||||
|
||||
// Homing speeds (mm/m)
|
||||
#define HOMING_FEEDRATE_XY 6000
|
||||
#define HOMING_FEEDRATE_Z 360
|
||||
#define HOMING_FEEDRATE_XY (50*60)
|
||||
#define HOMING_FEEDRATE_Z (6*60)
|
||||
|
||||
// Validate that endstops are triggered on homing moves
|
||||
#define VALIDATE_HOMING_ENDSTOPS
|
||||
@@ -1608,7 +1635,6 @@
|
||||
#define EEPROM_SETTINGS // Persistent storage with M500 and M501
|
||||
//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!
|
||||
#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
|
||||
#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
|
||||
#if ENABLED(EEPROM_SETTINGS)
|
||||
#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
|
||||
#endif
|
||||
@@ -1661,7 +1687,7 @@
|
||||
|
||||
#if ENABLED(NOZZLE_PARK_FEATURE)
|
||||
// Specify a park position as { X, Y, Z_raise }
|
||||
#define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MIN_POS + 30), 10 }
|
||||
#define NOZZLE_PARK_POINT { 150, (Y_MIN_POS + 10), 10 }
|
||||
#define NOZZLE_PARK_XY_FEEDRATE 100 // (mm/s) X and Y axes feedrate (also used for delta Z axis)
|
||||
#define NOZZLE_PARK_Z_FEEDRATE 5 // (mm/s) Z axis feedrate (not used for delta printers)
|
||||
#endif
|
||||
@@ -1704,19 +1730,19 @@
|
||||
* Attention: EXPERIMENTAL. G-code arguments may change.
|
||||
*
|
||||
*/
|
||||
//#define NOZZLE_CLEAN_FEATURE
|
||||
#define NOZZLE_CLEAN_FEATURE
|
||||
|
||||
#if ENABLED(NOZZLE_CLEAN_FEATURE)
|
||||
// Default number of pattern repetitions
|
||||
#define NOZZLE_CLEAN_STROKES 12
|
||||
#define NOZZLE_CLEAN_STROKES 4
|
||||
|
||||
// Default number of triangles
|
||||
#define NOZZLE_CLEAN_TRIANGLES 3
|
||||
|
||||
// Specify positions for each tool as { { X, Y, Z }, { X, Y, Z } }
|
||||
// Dual hotend system may use { { -20, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }, { 420, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }}
|
||||
#define NOZZLE_CLEAN_START_POINT { { 30, 30, (Z_MIN_POS + 1) } }
|
||||
#define NOZZLE_CLEAN_END_POINT { { 100, 60, (Z_MIN_POS + 1) } }
|
||||
#define NOZZLE_CLEAN_START_POINT { { -20, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }, { 420, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }}
|
||||
#define NOZZLE_CLEAN_END_POINT { { (-30), (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }, { (430), (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }}
|
||||
|
||||
// Circular pattern radius
|
||||
#define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
|
||||
@@ -1761,7 +1787,7 @@
|
||||
*
|
||||
* View the current statistics with M78.
|
||||
*/
|
||||
#define PRINTCOUNTER
|
||||
//#define PRINTCOUNTER
|
||||
|
||||
//=============================================================================
|
||||
//============================= LCD and SD support ============================
|
||||
@@ -1828,7 +1854,7 @@
|
||||
* This may be required to resolve "volume init" errors.
|
||||
*/
|
||||
//#define SPI_SPEED SPI_HALF_SPEED
|
||||
#define SPI_SPEED SPI_QUARTER_SPEED
|
||||
//#define SPI_SPEED SPI_QUARTER_SPEED
|
||||
//#define SPI_SPEED SPI_EIGHTH_SPEED
|
||||
|
||||
/**
|
||||
@@ -1930,9 +1956,7 @@
|
||||
//
|
||||
// Note: Usually sold with a white PCB.
|
||||
//
|
||||
#if DISABLED(GRAPHICSLCD)
|
||||
#define REPRAP_DISCOUNT_SMART_CONTROLLER
|
||||
#endif
|
||||
//#define REPRAP_DISCOUNT_SMART_CONTROLLER
|
||||
|
||||
//
|
||||
// Original RADDS LCD Display+Encoder+SDCardReader
|
||||
@@ -2072,9 +2096,7 @@
|
||||
// RepRapDiscount FULL GRAPHIC Smart Controller
|
||||
// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
|
||||
//
|
||||
#if ENABLED(GRAPHICSLCD)
|
||||
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
|
||||
#endif
|
||||
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
|
||||
|
||||
//
|
||||
// ReprapWorld Graphical LCD
|
||||
@@ -2298,8 +2320,9 @@
|
||||
// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
|
||||
// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
|
||||
// is too low, you should also increment SOFT_PWM_SCALE.
|
||||
//#define FAN_SOFT_PWM
|
||||
|
||||
#if ENABLED(TREX3)
|
||||
#define FAN_SOFT_PWM
|
||||
#endif
|
||||
// Incrementing this by 1 will double the software PWM frequency,
|
||||
// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
|
||||
// However, control resolution will be halved for each increment;
|
||||
|
||||
+162
-265
@@ -149,8 +149,8 @@
|
||||
* THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
|
||||
*/
|
||||
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
|
||||
#define THERMAL_PROTECTION_PERIOD 120 // Seconds
|
||||
#define THERMAL_PROTECTION_HYSTERESIS 10 // Degrees Celsius
|
||||
#define THERMAL_PROTECTION_PERIOD 30 // Seconds
|
||||
#define THERMAL_PROTECTION_HYSTERESIS 15 // Degrees Celsius
|
||||
|
||||
#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops
|
||||
#if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP)
|
||||
@@ -169,22 +169,22 @@
|
||||
* and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set
|
||||
* below 2.
|
||||
*/
|
||||
#define WATCH_TEMP_PERIOD 120 // Seconds
|
||||
#define WATCH_TEMP_INCREASE 4 // Degrees Celsius
|
||||
#define WATCH_TEMP_PERIOD 60 // Seconds
|
||||
#define WATCH_TEMP_INCREASE 2 // Degrees Celsius
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Thermal Protection parameters for the bed are just as above for hotends.
|
||||
*/
|
||||
#if ENABLED(THERMAL_PROTECTION_BED)
|
||||
#define THERMAL_PROTECTION_BED_PERIOD 240 // Seconds
|
||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 4 // Degrees Celsius
|
||||
#define THERMAL_PROTECTION_BED_PERIOD 80 // Seconds
|
||||
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
|
||||
|
||||
/**
|
||||
* As described above, except for the bed (M140/M190/M303).
|
||||
*/
|
||||
#define WATCH_BED_TEMP_PERIOD 240 // Seconds
|
||||
#define WATCH_BED_TEMP_INCREASE 4 // Degrees Celsius
|
||||
#define WATCH_BED_TEMP_PERIOD 80 // Seconds
|
||||
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -338,28 +338,21 @@
|
||||
* Controller Fan
|
||||
* To cool down the stepper drivers and MOSFETs.
|
||||
*
|
||||
* The fan turns on automatically whenever any driver is enabled and turns
|
||||
* off (or reduces to idle speed) shortly after drivers are turned off.
|
||||
*
|
||||
* The fan will turn on automatically whenever any stepper is enabled
|
||||
* and turn off after a set period after all steppers are turned off.
|
||||
*/
|
||||
//#define USE_CONTROLLER_FAN
|
||||
#if ENABLED(USE_CONTROLLER_FAN)
|
||||
//#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
|
||||
//#define CONTROLLER_FAN_USE_Z_ONLY // With this option only the Z axis is considered
|
||||
#define CONTROLLERFAN_SPEED_MIN 0 // (0-255) Minimum speed. (If set below this value the fan is turned off.)
|
||||
#define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled
|
||||
#define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled
|
||||
#define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors
|
||||
//#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
|
||||
#if ENABLED(CONTROLLER_FAN_EDITABLE)
|
||||
#define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu
|
||||
#endif
|
||||
//#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
|
||||
#define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
|
||||
#define CONTROLLERFAN_SPEED 255 // 255 == full speed
|
||||
//#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled
|
||||
#endif
|
||||
|
||||
// When first starting the main fan, run it at full speed for the
|
||||
// given number of milliseconds. This gets the fan spinning reliably
|
||||
// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
|
||||
//#define FAN_KICKSTART_TIME 100
|
||||
#define FAN_KICKSTART_TIME 100
|
||||
|
||||
// Some coolers may require a non-zero "off" state.
|
||||
//#define FAN_OFF_PWM 1
|
||||
@@ -420,8 +413,14 @@
|
||||
* Multiple extruders can be assigned to the same pin in which case
|
||||
* the fan will turn on when any selected extruder is above the threshold.
|
||||
*/
|
||||
#define E0_AUTO_FAN_PIN -1
|
||||
#define E1_AUTO_FAN_PIN -1
|
||||
#if ENABLED(TREX3)
|
||||
#define E0_AUTO_FAN_PIN 6
|
||||
#define E1_AUTO_FAN_PIN 45
|
||||
#else
|
||||
#define E0_AUTO_FAN_PIN -1
|
||||
#define E1_AUTO_FAN_PIN -1
|
||||
#endif
|
||||
|
||||
#define E2_AUTO_FAN_PIN -1
|
||||
#define E3_AUTO_FAN_PIN -1
|
||||
#define E4_AUTO_FAN_PIN -1
|
||||
@@ -447,15 +446,15 @@
|
||||
/**
|
||||
* M355 Case Light on-off / brightness
|
||||
*/
|
||||
//#define CASE_LIGHT_ENABLE
|
||||
#define CASE_LIGHT_ENABLE
|
||||
#if ENABLED(CASE_LIGHT_ENABLE)
|
||||
//#define CASE_LIGHT_PIN 4 // Override the default pin if needed
|
||||
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
|
||||
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
|
||||
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
|
||||
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)
|
||||
//#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
|
||||
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
|
||||
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
|
||||
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
|
||||
#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
|
||||
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
|
||||
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
|
||||
#define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
|
||||
@@ -517,11 +516,8 @@
|
||||
//
|
||||
// For Z set the number of stepper drivers
|
||||
//
|
||||
#if ENABLED(DUAL_Z)
|
||||
#define NUM_Z_STEPPER_DRIVERS 2 // (1-4) Z options change based on how many
|
||||
#else
|
||||
#define NUM_Z_STEPPER_DRIVERS 1 // (1-4) Z options change based on how many
|
||||
#endif
|
||||
#define NUM_Z_STEPPER_DRIVERS 1 // (1-4) Z options change based on how many
|
||||
|
||||
#if NUM_Z_STEPPER_DRIVERS > 1
|
||||
//#define Z_MULTI_ENDSTOPS
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
@@ -566,12 +562,16 @@
|
||||
* Set the initial X offset and temperature differential with M605 S2 X[offs] R[deg] and
|
||||
* follow with M605 S3 to initiate mirrored movement.
|
||||
*/
|
||||
//#define DUAL_X_CARRIAGE
|
||||
#define DUAL_X_CARRIAGE
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
#define X1_MIN_POS X_MIN_POS // Set to X_MIN_POS
|
||||
#define X1_MAX_POS X_BED_SIZE // Set a maximum so the first X-carriage can't hit the parked second X-carriage
|
||||
#define X2_MIN_POS 80 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage
|
||||
#define X2_MAX_POS 353 // Set this to the distance between toolheads when both heads are homed
|
||||
#define X2_MIN_POS 0 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage
|
||||
#if DISABLED(TREX3) || ENABLED(TREX3_UPGRADE)
|
||||
#define X2_MAX_POS 442 // Set this to the distance between toolheads when both heads are homed
|
||||
#else
|
||||
#define X2_MAX_POS 446 // Set this to the distance between toolheads when both heads are homed
|
||||
#endif
|
||||
#define X2_HOME_DIR 1 // Set to 1. The second X-carriage always homes to the maximum endstop position
|
||||
#define X2_HOME_POS X2_MAX_POS // Default X2 home position. Set to X2_MAX_POS.
|
||||
// However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
|
||||
@@ -583,7 +583,7 @@
|
||||
#define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE
|
||||
|
||||
// Default x offset in duplication mode (typically set to half print bed width)
|
||||
#define DEFAULT_DUPLICATION_X_OFFSET 100
|
||||
#define DEFAULT_DUPLICATION_X_OFFSET 200
|
||||
|
||||
#endif // DUAL_X_CARRIAGE
|
||||
|
||||
@@ -596,16 +596,16 @@
|
||||
// Homing hits each endstop, retracts by these distances, then does a slower bump.
|
||||
#define X_HOME_BUMP_MM 5
|
||||
#define Y_HOME_BUMP_MM 5
|
||||
#define Z_HOME_BUMP_MM 5
|
||||
#define Z_HOME_BUMP_MM 2
|
||||
#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
|
||||
//#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially
|
||||
#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially
|
||||
//#define HOMING_BACKOFF_MM { 2, 2, 2 } // (mm) Move away from the endstops after homing
|
||||
|
||||
// When G28 is called, this option will make Y home before X
|
||||
//#define HOME_Y_BEFORE_X
|
||||
|
||||
// Enable this if X or Y can't home without homing the other axis first.
|
||||
#define CODEPENDENT_XY_HOMING
|
||||
//#define CODEPENDENT_XY_HOMING
|
||||
|
||||
#if ENABLED(BLTOUCH)
|
||||
/**
|
||||
@@ -678,9 +678,7 @@
|
||||
* Z Steppers Auto-Alignment
|
||||
* Add the G34 command to align multiple Z steppers using a bed probe.
|
||||
*/
|
||||
#if ENABLED(DUAL_Z)
|
||||
#define Z_STEPPER_AUTO_ALIGN
|
||||
#endif
|
||||
//#define Z_STEPPER_AUTO_ALIGN
|
||||
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
|
||||
// Define probe X and Y positions for Z1, Z2 [, Z3 [, Z4]]
|
||||
// If not defined, probe limits will be used.
|
||||
@@ -726,8 +724,8 @@
|
||||
#endif
|
||||
|
||||
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
|
||||
#define G34_MAX_GRADE 15 // (%) Maximum incline that G34 will handle
|
||||
#define Z_STEPPER_ALIGN_ITERATIONS 8 // Number of iterations to apply during alignment
|
||||
#define G34_MAX_GRADE 5 // (%) Maximum incline that G34 will handle
|
||||
#define Z_STEPPER_ALIGN_ITERATIONS 5 // Number of iterations to apply during alignment
|
||||
#define Z_STEPPER_ALIGN_ACC 0.02 // Stop iterating early if the accuracy is better than this
|
||||
#define RESTORE_LEVELING_AFTER_G34 // Restore leveling after G34 is done?
|
||||
// After G34, re-home Z (G28 Z) or just calculate it from the last probe heights?
|
||||
@@ -765,12 +763,8 @@
|
||||
// Minimum time that a segment needs to take if the buffer is emptied
|
||||
#define DEFAULT_MINSEGMENTTIME 20000 // (ms)
|
||||
|
||||
// Slow down the machine if the look ahead buffer is (by default) half full.
|
||||
// Increase the slowdown divisor for larger buffer sizes.
|
||||
// If defined the movements slow down when the look ahead buffer is only half full
|
||||
#define SLOWDOWN
|
||||
#if ENABLED(SLOWDOWN)
|
||||
#define SLOWDOWN_DIVISOR 2
|
||||
#endif
|
||||
|
||||
// Frequency limit
|
||||
// See nophead's blog for more info
|
||||
@@ -786,7 +780,7 @@
|
||||
// Backlash Compensation
|
||||
// Adds extra movement to axes on direction-changes to account for backlash.
|
||||
//
|
||||
//#define BACKLASH_COMPENSATION
|
||||
#define BACKLASH_COMPENSATION
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
// Define values for backlash distance and correction.
|
||||
// If BACKLASH_GCODE is enabled these values are the defaults.
|
||||
@@ -798,7 +792,7 @@
|
||||
//#define BACKLASH_SMOOTHING_MM 3 // (mm)
|
||||
|
||||
// Add runtime configuration and tuning of backlash values (M425)
|
||||
//#define BACKLASH_GCODE
|
||||
#define BACKLASH_GCODE
|
||||
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
// Measure the Z backlash when probing (G29) and set with "M425 Z"
|
||||
@@ -828,7 +822,9 @@
|
||||
* Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within
|
||||
* ±5mm of true values for G425 to succeed.
|
||||
*/
|
||||
//#define CALIBRATION_GCODE
|
||||
#if ENABLED(autoCalibrationKit)
|
||||
#define CALIBRATION_GCODE
|
||||
#endif
|
||||
#if ENABLED(CALIBRATION_GCODE)
|
||||
|
||||
#define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm
|
||||
@@ -845,8 +841,8 @@
|
||||
//#define CALIBRATION_REPORTING
|
||||
|
||||
// The true location and dimension the cube/bolt/washer on the bed.
|
||||
#define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm
|
||||
#define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm
|
||||
#define CALIBRATION_OBJECT_CENTER { 264.0, 25.0, 12.5 } // mm
|
||||
#define CALIBRATION_OBJECT_DIMENSIONS { 12.55, 12.55, 4.0 } // mm
|
||||
|
||||
// Comment out any sides which are unreachable by the probe. For best
|
||||
// auto-calibration results, all sides must be reachable.
|
||||
@@ -857,12 +853,12 @@
|
||||
|
||||
// Probing at the exact top center only works if the center is flat. If
|
||||
// probing on a screwhead or hollow washer, probe near the edges.
|
||||
//#define CALIBRATION_MEASURE_AT_TOP_EDGES
|
||||
#define CALIBRATION_MEASURE_AT_TOP_EDGES
|
||||
|
||||
// Define the pin to read during calibration
|
||||
#ifndef CALIBRATION_PIN
|
||||
//#define CALIBRATION_PIN -1 // Define here to override the default pin
|
||||
#define CALIBRATION_PIN_INVERTING false // Set to true to invert the custom pin
|
||||
#define CALIBRATION_PIN 58 // Override in pins.h or set to -1 to use your Z endstop
|
||||
#define CALIBRATION_PIN_INVERTING true // Set to true to invert the pin
|
||||
//#define CALIBRATION_PIN_PULLDOWN
|
||||
#define CALIBRATION_PIN_PULLUP
|
||||
#endif
|
||||
@@ -874,9 +870,8 @@
|
||||
* vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the
|
||||
* lowest stepping frequencies.
|
||||
*/
|
||||
#if ENABLED(SKRLPCBoard)
|
||||
#define ADAPTIVE_STEP_SMOOTHING
|
||||
#endif
|
||||
//#define ADAPTIVE_STEP_SMOOTHING
|
||||
|
||||
/**
|
||||
* Custom Microstepping
|
||||
* Override as-needed for your setup. Up to 3 MS pins are supported.
|
||||
@@ -1001,15 +996,13 @@
|
||||
#define STATUS_MESSAGE_SCROLLING
|
||||
|
||||
// On the Info Screen, display XY with one decimal place when possible
|
||||
//#define LCD_DECIMAL_SMALL_XY
|
||||
#define LCD_DECIMAL_SMALL_XY
|
||||
|
||||
// The timeout (in ms) to return to the status screen from sub-menus
|
||||
#define LCD_TIMEOUT_TO_STATUS 15000
|
||||
|
||||
// Add an 'M73' G-code to set the current percentage
|
||||
#if ENABLED(GRAPHICSLCD)
|
||||
#define LCD_SET_PROGRESS_MANUALLY
|
||||
#endif
|
||||
#define LCD_SET_PROGRESS_MANUALLY
|
||||
|
||||
// Show the E position (filament used) during printing
|
||||
//#define LCD_SHOW_E_TOTAL
|
||||
@@ -1018,7 +1011,7 @@
|
||||
#define BOOTSCREEN_TIMEOUT 2000 // (ms) Total Duration to display the boot screen(s)
|
||||
#endif
|
||||
|
||||
#if HAS_GRAPHICAL_LCD && EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
|
||||
#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
|
||||
//#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
|
||||
//#define SHOW_REMAINING_TIME // Display estimated time to completion
|
||||
#if ENABLED(SHOW_REMAINING_TIME)
|
||||
@@ -1057,10 +1050,6 @@
|
||||
|
||||
#define EVENT_GCODE_SD_STOP "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27")
|
||||
|
||||
#if ENABLED(PRINTER_EVENT_LEDS)
|
||||
#define PE_LEDS_COMPLETED_TIME (30*60) // (seconds) Time to keep the LED "done" color before restoring normal illumination
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Continue after Power-Loss (Creality3D)
|
||||
*
|
||||
@@ -1072,9 +1061,7 @@
|
||||
* If the machine reboots when resuming a print you may need to replace or
|
||||
* reformat the SD card. (Bad sectors delay startup triggering the watchdog.)
|
||||
*/
|
||||
#if ENABLED(SKRLPCBoard)
|
||||
#define POWER_LOSS_RECOVERY
|
||||
#endif
|
||||
#define POWER_LOSS_RECOVERY
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
#define PLR_ENABLED_DEFAULT false // Power Loss Recovery enabled by default. (Set with 'M413 Sn' & M500)
|
||||
//#define BACKUP_POWER_SUPPLY // Backup power / UPS to move the steppers on power loss
|
||||
@@ -1240,7 +1227,7 @@
|
||||
*/
|
||||
#if HAS_GRAPHICAL_LCD
|
||||
// Show SD percentage next to the progress bar
|
||||
#define DOGM_SD_PERCENT
|
||||
//#define DOGM_SD_PERCENT
|
||||
|
||||
// Enable to save many cycles by drawing a hollow frame on the Info Screen
|
||||
#define XYZ_HOLLOW_FRAME
|
||||
@@ -1250,7 +1237,7 @@
|
||||
|
||||
// A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
|
||||
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
||||
#define USE_BIG_EDIT_FONT
|
||||
//#define USE_BIG_EDIT_FONT
|
||||
|
||||
// A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
|
||||
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
||||
@@ -1298,18 +1285,14 @@
|
||||
//#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
|
||||
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
|
||||
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
|
||||
#if DISABLED(SKRLPCBoard)
|
||||
#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash)
|
||||
#else
|
||||
#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM.
|
||||
#endif
|
||||
#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash)
|
||||
//#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM.
|
||||
|
||||
// Frivolous Game Options
|
||||
#if ENABLED(SKRLPCBoard)
|
||||
#define MARLIN_BRICKOUT
|
||||
#define MARLIN_INVADERS
|
||||
#define MARLIN_SNAKE
|
||||
#endif
|
||||
//#define MARLIN_BRICKOUT
|
||||
//#define MARLIN_INVADERS
|
||||
//#define MARLIN_SNAKE
|
||||
//#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu
|
||||
|
||||
#endif // HAS_GRAPHICAL_LCD
|
||||
|
||||
@@ -1488,7 +1471,7 @@
|
||||
//#define BABYSTEP_WITHOUT_HOMING
|
||||
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
|
||||
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
|
||||
#define BABYSTEP_MULTIPLICATOR_Z 10 // Babysteps are very small. Increase for faster motion.
|
||||
#define BABYSTEP_MULTIPLICATOR_Z 20 // Babysteps are very small. Increase for faster motion.
|
||||
#define BABYSTEP_MULTIPLICATOR_XY 1
|
||||
|
||||
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
|
||||
@@ -1506,10 +1489,8 @@
|
||||
|
||||
#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
|
||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
||||
//#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets
|
||||
#if ENABLED(GRAPHICSLCD)
|
||||
#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
|
||||
#endif
|
||||
#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets
|
||||
#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1531,7 +1512,7 @@
|
||||
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||
*/
|
||||
#if E0_DRIVER_TYPE != TMC2208_STANDALONE
|
||||
#if DISABLED(E_2208) || ENABLED(E_Spreadcycle)
|
||||
#define LIN_ADVANCE
|
||||
#endif
|
||||
#if ENABLED(LIN_ADVANCE)
|
||||
@@ -1581,19 +1562,17 @@
|
||||
|
||||
#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)
|
||||
// Override the mesh area if the automatic (max) area is too large
|
||||
//#define MESH_MIN_X MESH_INSET
|
||||
//#define MESH_MIN_Y MESH_INSET
|
||||
//#define MESH_MAX_X X_BED_SIZE - (MESH_INSET)
|
||||
//#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET)
|
||||
#define MESH_MIN_X X_MIN_POS + MESH_INSET
|
||||
#define MESH_MIN_Y Y_MIN_POS + MESH_INSET
|
||||
#define MESH_MAX_X X_MAX_POS - MESH_INSET
|
||||
#define MESH_MAX_Y Y_MAX_POS - MESH_INSET
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Repeatedly attempt G29 leveling until it succeeds.
|
||||
* Stop after G29_MAX_RETRIES attempts.
|
||||
*/
|
||||
#if DISABLED(UBL)
|
||||
#define G29_RETRY_AND_RECOVER
|
||||
#endif
|
||||
//#define G29_RETRY_AND_RECOVER
|
||||
#if ENABLED(G29_RETRY_AND_RECOVER)
|
||||
#define G29_MAX_RETRIES 3
|
||||
#define G29_HALT_ON_FAILURE
|
||||
@@ -1602,7 +1581,7 @@
|
||||
* between attempts, and after the maximum number of retries have been tried.
|
||||
*/
|
||||
#define G29_SUCCESS_COMMANDS "M117 Bed leveling done."
|
||||
#define G29_RECOVER_COMMANDS "M117 Probe failed.\nG28\n"
|
||||
#define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0"
|
||||
#define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1"
|
||||
|
||||
#endif
|
||||
@@ -1620,11 +1599,18 @@
|
||||
// Add additional compensation depending on hotend temperature
|
||||
// Note: this values cannot be calibrated and have to be set manually
|
||||
#if ENABLED(PROBE_TEMP_COMPENSATION)
|
||||
// Max temperature that can be reached by heated bed.
|
||||
// This is required only for the calibration process.
|
||||
#define PTC_MAX_BED_TEMP BED_MAXTEMP
|
||||
|
||||
// Park position to wait for probe cooldown
|
||||
#define PTC_PARK_POS { 0, 0, 100 }
|
||||
#define PTC_PARK_POS_X 0.0F
|
||||
#define PTC_PARK_POS_Y 0.0F
|
||||
#define PTC_PARK_POS_Z 100.0F
|
||||
|
||||
// Probe position to probe and wait for probe to reach target temperature
|
||||
#define PTC_PROBE_POS { 90, 100 }
|
||||
#define PTC_PROBE_POS_X 90.0F
|
||||
#define PTC_PROBE_POS_Y 100.0F
|
||||
|
||||
// Enable additional compensation using hotend temperature
|
||||
// Note: this values cannot be calibrated automatically but have to be set manually
|
||||
@@ -1642,7 +1628,9 @@
|
||||
//
|
||||
// G2/G3 Arc Support
|
||||
//
|
||||
#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
|
||||
#if DISABLED(autoCalibrationKit)
|
||||
#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
|
||||
#endif
|
||||
#if ENABLED(ARC_SUPPORT)
|
||||
#define MM_PER_ARC_SEGMENT 1 // (mm) Length (or minimum length) of each arc segment
|
||||
//#define ARC_SEGMENTS_PER_R 1 // Max segment length, MM_PER = Min
|
||||
@@ -1654,7 +1642,9 @@
|
||||
#endif
|
||||
|
||||
// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
|
||||
#define BEZIER_CURVE_SUPPORT
|
||||
#if DISABLED(autoCalibrationKit)
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
#endif
|
||||
|
||||
/**
|
||||
* G38 Probe Target
|
||||
@@ -1728,8 +1718,8 @@
|
||||
|
||||
// The number of linear motions that can be in the plan at any give time.
|
||||
// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering.
|
||||
#if ENABLED(SKRLPCBoard)
|
||||
#define BLOCK_BUFFER_SIZE 64 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
|
||||
#else
|
||||
#define BLOCK_BUFFER_SIZE 16 // maximize block buffer
|
||||
#endif
|
||||
@@ -1738,13 +1728,7 @@
|
||||
|
||||
// The ASCII buffer for serial input
|
||||
#define MAX_CMD_SIZE 96
|
||||
#if ENABLED(SKRLPCBoard)
|
||||
#define BUFSIZE 32
|
||||
#elif BOTH(GRAPHICSLCD, UBL)
|
||||
#define BUFSIZE 12
|
||||
#else
|
||||
#define BUFSIZE 16
|
||||
#endif
|
||||
#define BUFSIZE 4
|
||||
|
||||
// Transmission to Host Buffer Size
|
||||
// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
|
||||
@@ -1790,7 +1774,7 @@
|
||||
// Therefore some clients abort after 30 seconds in a timeout.
|
||||
// Some other clients start sending commands while receiving a 'wait'.
|
||||
// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
|
||||
#define NO_TIMEOUTS 1000 // Milliseconds
|
||||
//#define NO_TIMEOUTS 1000 // Milliseconds
|
||||
|
||||
// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
|
||||
#define ADVANCED_OK
|
||||
@@ -1825,7 +1809,9 @@
|
||||
* Note that M207 / M208 / M209 settings are saved to EEPROM.
|
||||
*
|
||||
*/
|
||||
#define FWRETRACT
|
||||
#if ENABLED(ABL_Bilinear)
|
||||
#define FWRETRACT
|
||||
#endif
|
||||
#if ENABLED(FWRETRACT)
|
||||
#define FWRETRACT_AUTORETRACT // Override slicer retractions
|
||||
#if ENABLED(FWRETRACT_AUTORETRACT)
|
||||
@@ -1851,19 +1837,19 @@
|
||||
*/
|
||||
#if EXTRUDERS > 1
|
||||
// Z raise distance for tool-change, as needed for some extruders
|
||||
#define TOOLCHANGE_ZRAISE 2 // (mm)
|
||||
//#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change
|
||||
#define TOOLCHANGE_ZRAISE 1 // (mm)
|
||||
#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change
|
||||
#if ENABLED(TOOLCHANGE_NO_RETURN)
|
||||
//#define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // G-code to run after tool-change is complete
|
||||
#define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // G-code to run after tool-change is complete
|
||||
#endif
|
||||
|
||||
// Retract and prime filament on tool-change
|
||||
//#define TOOLCHANGE_FILAMENT_SWAP
|
||||
#define TOOLCHANGE_FILAMENT_SWAP
|
||||
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
|
||||
#define TOOLCHANGE_FIL_SWAP_LENGTH 12 // (mm)
|
||||
#define TOOLCHANGE_FIL_SWAP_LENGTH 4 // (mm)
|
||||
#define TOOLCHANGE_FIL_EXTRA_PRIME 2 // (mm)
|
||||
#define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3600 // (mm/m)
|
||||
#define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3600 // (mm/m)
|
||||
#define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3000 // (mm/m)
|
||||
#define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3000 // (mm/m)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -1890,43 +1876,43 @@
|
||||
#define ADVANCED_PAUSE_FEATURE
|
||||
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
||||
#define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate.
|
||||
#define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract.
|
||||
#define PAUSE_PARK_RETRACT_LENGTH 4 // (mm) Initial retract.
|
||||
// This short retract is done immediately, before parking the nozzle.
|
||||
#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast.
|
||||
#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 41 // (mm/s) Unload filament feedrate. This can be pretty fast.
|
||||
#define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
|
||||
#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload.
|
||||
#define FILAMENT_CHANGE_UNLOAD_LENGTH 70 // (mm) The length of filament for a complete unload.
|
||||
// For Bowden, the full length of the tube and nozzle.
|
||||
// For direct drive, the full length of the nozzle.
|
||||
// Set to 0 for manual unloading.
|
||||
#define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load.
|
||||
#define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material.
|
||||
// 0 to disable start loading and skip to fast load only
|
||||
#define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast.
|
||||
#define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 30 // (mm/s) Load filament feedrate. This can be pretty fast.
|
||||
#define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
|
||||
#define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle.
|
||||
#define FILAMENT_CHANGE_FAST_LOAD_LENGTH 50 // (mm) Load length of filament, from extruder gear to nozzle.
|
||||
// For Bowden, the full length of the tube and nozzle.
|
||||
// For direct drive, the full length of the nozzle.
|
||||
//#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted.
|
||||
#define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
|
||||
#define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading.
|
||||
#define ADVANCED_PAUSE_PURGE_LENGTH 20 // (mm) Length to extrude after loading.
|
||||
// Set to 0 for manual extrusion.
|
||||
// Filament can be extruded repeatedly from the Filament Change menu
|
||||
// until extrusion is consistent, and to purge old filament.
|
||||
#define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park.
|
||||
#define ADVANCED_PAUSE_RESUME_PRIME 2 // (mm) Extra distance to prime nozzle after returning from park.
|
||||
#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused.
|
||||
|
||||
// Filament Unload does a Retract, Delay, and Purge first:
|
||||
#define FILAMENT_UNLOAD_PURGE_RETRACT 13 // (mm) Unload initial retract length.
|
||||
#define FILAMENT_UNLOAD_PURGE_DELAY 5000 // (ms) Delay for the filament to cool after retract.
|
||||
#define FILAMENT_UNLOAD_PURGE_RETRACT 4 // (mm) Unload initial retract length.
|
||||
#define FILAMENT_UNLOAD_PURGE_DELAY 2000 // (ms) Delay for the filament to cool after retract.
|
||||
#define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.
|
||||
#define FILAMENT_UNLOAD_PURGE_FEEDRATE 25 // (mm/s) feedrate to purge before unload
|
||||
|
||||
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
|
||||
#define FILAMENT_CHANGE_ALERT_BEEPS 2 // Number of alert beeps to play when a response is needed.
|
||||
#define FILAMENT_CHANGE_ALERT_BEEPS 1 // Number of alert beeps to play when a response is needed.
|
||||
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
|
||||
|
||||
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
|
||||
#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
|
||||
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
|
||||
#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
|
||||
|
||||
#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
|
||||
#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
|
||||
@@ -2273,7 +2259,7 @@
|
||||
* Define you own with
|
||||
* { <off_time[1..15]>, <hysteresis_end[-3..12]>, hysteresis_start[1..8] }
|
||||
*/
|
||||
#define CHOPPER_TIMING CHOPPER_DEFAULT_24V
|
||||
#define CHOPPER_TIMING CHOPPER_DEFAULT_12V
|
||||
|
||||
/**
|
||||
* Monitor Trinamic drivers for error conditions,
|
||||
@@ -2301,7 +2287,7 @@
|
||||
* STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
|
||||
* M913 X/Y/Z/E to live tune the setting
|
||||
*/
|
||||
#define HYBRID_THRESHOLD
|
||||
//#define HYBRID_THRESHOLD
|
||||
|
||||
#define X_HYBRID_THRESHOLD 100 // [mm/s]
|
||||
#define X2_HYBRID_THRESHOLD 100
|
||||
@@ -2675,129 +2661,40 @@
|
||||
*
|
||||
* See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details.
|
||||
*/
|
||||
//#define SPINDLE_FEATURE
|
||||
//#define LASER_FEATURE
|
||||
|
||||
#if ENABLED(TREX3)
|
||||
#define LASER_FEATURE
|
||||
#endif
|
||||
#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
#define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH
|
||||
#define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power
|
||||
//#define SHOW_CUTTER_ICON
|
||||
#define SPINDLE_LASER_ACTIVE_HIGH true // Set to "true" if the on/off function is active HIGH
|
||||
#define SPINDLE_LASER_PWM false // Set to "true" if your controller supports setting the speed/power
|
||||
#define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower
|
||||
|
||||
#define SPINDLE_LASER_FREQUENCY 2500 // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
|
||||
|
||||
/**
|
||||
* Speed / Power can be set ('M3 S') and displayed in terms of:
|
||||
* - PWM (S0 - S255)
|
||||
* - PERCENT (S0 - S100)
|
||||
* - RPM (S0 - S50000) Best for use with a spindle
|
||||
*/
|
||||
#define CUTTER_POWER_DISPLAY PWM
|
||||
|
||||
/**
|
||||
* Relative mode uses relative range (SPEED_POWER_MIN to SPEED_POWER_MAX) instead of normal range (0 to SPEED_POWER_MAX)
|
||||
* Best use with SuperPID router controller where for example S0 = 5,000 RPM and S255 = 30,000 RPM
|
||||
*/
|
||||
//#define CUTTER_POWER_RELATIVE // Set speed proportional to [SPEED_POWER_MIN...SPEED_POWER_MAX] instead of directly
|
||||
#define SPINDLE_LASER_POWERUP_DELAY 1 // (ms) Delay to allow the spindle/laser to come up to speed/power
|
||||
#define SPINDLE_LASER_POWERDOWN_DELAY 1 // (ms) Delay to allow the spindle to stop
|
||||
|
||||
#if ENABLED(SPINDLE_FEATURE)
|
||||
//#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction
|
||||
#define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction
|
||||
#define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed
|
||||
|
||||
#define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power
|
||||
#define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop
|
||||
|
||||
/**
|
||||
* M3/M4 uses the following equation to convert speed/power to PWM duty cycle
|
||||
* Power = ((DC / 255 * 100) - SPEED_POWER_INTERCEPT)) * (1 / SPEED_POWER_SLOPE)
|
||||
* where PWM DC varies from 0 to 255
|
||||
* The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power
|
||||
*
|
||||
* Set these required parameters for your controller
|
||||
* SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT
|
||||
* where PWM duty cycle varies from 0 to 255
|
||||
*
|
||||
* set the following for your controller (ALL MUST BE SET)
|
||||
*/
|
||||
#define SPEED_POWER_SLOPE 118.4 // SPEED_POWER_SLOPE = SPEED_POWER_MAX / 255
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 5000
|
||||
#define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM
|
||||
#define SPEED_POWER_STARTUP 25000 // The default value for speed power when M3 is called without arguments
|
||||
|
||||
#define SPEED_POWER_SLOPE 118.4
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 5000
|
||||
#define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM
|
||||
#else
|
||||
|
||||
#define SPEED_POWER_SLOPE 0.3922 // SPEED_POWER_SLOPE = SPEED_POWER_MAX / 255
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 0
|
||||
#define SPEED_POWER_MAX 100 // 0-100%
|
||||
#define SPEED_POWER_STARTUP 80 // The default value for speed power when M3 is called without arguments
|
||||
|
||||
/**
|
||||
* Enable inline laser power to be handled in the planner / stepper routines.
|
||||
* Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
|
||||
* or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
|
||||
*
|
||||
* This allows the laser to keep in perfect sync with the planner and removes
|
||||
* the powerup/down delay since lasers require negligible time.
|
||||
*/
|
||||
#define LASER_POWER_INLINE
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
/**
|
||||
* Scale the laser's power in proportion to the movement rate.
|
||||
*
|
||||
* - Sets the entry power proportional to the entry speed over the nominal speed.
|
||||
* - Ramps the power up every N steps to approximate the speed trapezoid.
|
||||
* - Due to the limited power resolution this is only approximate.
|
||||
*/
|
||||
#define LASER_POWER_INLINE_TRAPEZOID
|
||||
|
||||
/**
|
||||
* Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
|
||||
* Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
|
||||
* This is a costly calculation so this option is discouraged on 8-bit AVR boards.
|
||||
*
|
||||
* LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
|
||||
* board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
|
||||
* Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_TRAPEZOID_CONT
|
||||
|
||||
/**
|
||||
* Stepper iterations between power updates. Increase this value if the board
|
||||
* can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
|
||||
* Disable (or set to 0) to recalculate power on every stepper iteration.
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
|
||||
|
||||
/**
|
||||
* Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
|
||||
*/
|
||||
//#define LASER_MOVE_POWER
|
||||
|
||||
#if ENABLED(LASER_MOVE_POWER)
|
||||
// Turn off the laser on G0 moves with no power parameter.
|
||||
// If a power parameter is provided, use that instead.
|
||||
//#define LASER_MOVE_G0_OFF
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Inline flag inverted
|
||||
*
|
||||
* WARNING: M5 will NOT turn off the laser unless another move
|
||||
* is done (so G-code files must end with 'M5 I').
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_INVERT
|
||||
|
||||
/**
|
||||
* Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
|
||||
*
|
||||
* The laser might do some weird things, so only enable this
|
||||
* feature if you understand the implications.
|
||||
*/
|
||||
//#define LASER_POWER_INLINE_CONTINUOUS
|
||||
|
||||
#else
|
||||
|
||||
#define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
|
||||
#define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
|
||||
|
||||
#endif
|
||||
#define SPEED_POWER_SLOPE 0.3922
|
||||
#define SPEED_POWER_INTERCEPT 0
|
||||
#define SPEED_POWER_MIN 10
|
||||
#define SPEED_POWER_MAX 100 // 0-100%
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -2959,34 +2856,34 @@
|
||||
#define CUSTOM_USER_MENUS
|
||||
#if ENABLED(CUSTOM_USER_MENUS)
|
||||
//#define USER_SCRIPT_DONE "M117 User Script Done"
|
||||
#define CUSTOM_USER_MENU_TITLE "Setup"
|
||||
#define USER_SCRIPT_AUDIBLE_FEEDBACK
|
||||
#define USER_SCRIPT_RETURN // Return to status screen after a script
|
||||
#define CUSTOM_USER_MENU_TITLE "Leveling Tools"
|
||||
|
||||
#define CommBedTmp "65"
|
||||
#if ENABLED(DUAL_Z)
|
||||
#define ALIGN_CMD "G34RI20\n"
|
||||
#if ENABLED(TREX3)
|
||||
#define COMMFANNSPEED " "
|
||||
#else
|
||||
#define ALIGN_CMD ""
|
||||
#endif
|
||||
#define USER_DESC_1 "Setup"
|
||||
#if (ENABLED(UBL))
|
||||
#define USER_GCODE_1 "M190S" CommBedTmp"\nG28\n" ALIGN_CMD "G29P1\nG29S1\nG29S0\n G29F0.0\nG29A\nG28\nM109S225\nG1X150Y150\nG1Z0\nM500\nM400\nM77\nM117 Set Z Offset"
|
||||
#else
|
||||
#define USER_GCODE_1 "M190S" CommBedTmp"\n M117 Probing....\nM104S225\nG28\n" ALIGN_CMD "G29\nM400\nG28\nM420S1\nM109S225\nG1X100Y100\nG1Z0\nM500\nM400\nM77\nM117 Set Z Offset"
|
||||
#define COMMFANNSPEED "M106 S128 \n"
|
||||
#endif
|
||||
|
||||
#define USER_DESC_2 "PID Tune"
|
||||
#define USER_GCODE_2 "M106 S128\nM303C8S225E0\nM500\nM117 PID Tune Done"
|
||||
|
||||
#define USER_DESC_1 "Mesh Setup"
|
||||
#define USER_DESC_3 "Prep for Z Adjust"
|
||||
#define USER_GCODE_3 "M190S" CommBedTmp"\nM104S235\nG28\nG29L1\nG1X100Y100\nG1Z0"
|
||||
#if ENABLED(ABL_Bilinear)
|
||||
#define USER_GCODE_1 "M502 \n M500 \n M501 \n M190 S75 \n G28 \n G29 \n M500 \n G28 \n M420 S1 \n " COMMFANNSPEED " M109 S225 \n G1 X100 Y 100 \n G1 Z0 \n M77 \n M117 Set Z Offset"
|
||||
#define USER_GCODE_3 "M190 S75 \n " COMMFANNSPEED " M104 235 \n G28 \n M420 S1 \n G1 X100 Y 100 \n G1 Z0"
|
||||
#else
|
||||
#define USER_GCODE_1 "M502 \n M500 \n M501 \n M190 S75 \n G28 \n G29 P1 \n G29 S1 \n G29 S0 \n G29 F 10.0 \n G29 A \n M500 \n G28 \n G29 L1 \n " COMMFANNSPEED " M109 S225 \n G1 X150 Y 150 \n G1 Z0 \n M77 \n M117 Set Z Offset"
|
||||
#define USER_GCODE_3 "M190 S75 \n " COMMFANNSPEED " M104 235 \n G28 \n G29 L1 \n G1 X100 Y 100 \n G1 Z0"
|
||||
#endif
|
||||
|
||||
#define USER_DESC_4 "Store Settings"
|
||||
#define USER_GCODE_4 "M500\nM117 Settings Stored"
|
||||
#define USER_DESC_4 "Fill Mesh Points"
|
||||
#define USER_GCODE_4 "G29 P3 \n G29 P3 \n G29 P3 \n G29 T"
|
||||
|
||||
//#define USER_DESC_5 "Run Mesh Validation"
|
||||
//#define USER_GCODE_5 "G26"
|
||||
#define USER_DESC_2 "PID Bed"
|
||||
#define USER_GCODE_2 "M303 C4 S75 E-1 U \n M500 \n M117 PID Tune Done"
|
||||
|
||||
#define USER_DESC_5 "Run Mesh Validation"
|
||||
#define USER_GCODE_5 "G26"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
||||
+8
-1
@@ -92,6 +92,9 @@ U8GLIB ?= 1
|
||||
# this defines whether to include the Trinamic TMCStepper library
|
||||
TMC ?= 1
|
||||
|
||||
# this defines whether to include the AdaFruit NeoPixel library
|
||||
NEOPIXEL ?= 0
|
||||
|
||||
############
|
||||
# Try to automatically determine whether RELOC_WORKAROUND is needed based
|
||||
# on GCC versions:
|
||||
@@ -185,7 +188,7 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1109)
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1110)
|
||||
# zrib V2.0 control board (Chinese knock off RAMPS replica)
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1111)
|
||||
# Bigtreetech or BIQU KFB2.0
|
||||
# BigTreeTech or BIQU KFB2.0
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1112)
|
||||
# Felix 2.0+ Electronics Board (RAMPS like)
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1113)
|
||||
@@ -255,6 +258,10 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1143)
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1144)
|
||||
# ADIMLab Gantry v2
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1145)
|
||||
# BIQU Tango V1
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1146)
|
||||
# MKS GEN L V2
|
||||
else ifeq ($(HARDWARE_MOTHERBOARD),1147)
|
||||
|
||||
#
|
||||
# RAMBo and derivatives
|
||||
|
||||
+4
-4
@@ -28,7 +28,7 @@
|
||||
/**
|
||||
* Marlin release version identifier
|
||||
*/
|
||||
#define SHORT_BUILD_VERSION "2.0.5_SX4M"
|
||||
#define SHORT_BUILD_VERSION "2.0.5_TR24"
|
||||
|
||||
/**
|
||||
* Verbose version identifier which should contain a reference to the location
|
||||
@@ -41,12 +41,12 @@
|
||||
* here we define this default string as the date where the latest release
|
||||
* version was tagged.
|
||||
*/
|
||||
#define STRING_DISTRIBUTION_DATE "2020-04-07"
|
||||
#define STRING_DISTRIBUTION_DATE "2020-04-02"
|
||||
|
||||
/**
|
||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||
*/
|
||||
#define MACHINE_NAME "TM3D SX4"
|
||||
#define MACHINE_NAME "TM3D Trex"
|
||||
|
||||
/**
|
||||
* The SOURCE_CODE_URL is the location where users will find the Marlin Source
|
||||
@@ -54,7 +54,7 @@
|
||||
* has a distinct Github fork— the Source Code URL should just be the main
|
||||
* Marlin repository.
|
||||
*/
|
||||
#define SOURCE_CODE_URL "https://github.com/InsanityAutomation/Marlin/tree/TM_SX4_2.0"
|
||||
#define SOURCE_CODE_URL "https://github.com/InsanityAutomation/Marlin/tree/TM_Trex2+_2.0.x"
|
||||
|
||||
/**
|
||||
* Default generic printer UUID.
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
|
||||
This directory is intended for the project specific (private) libraries.
|
||||
PlatformIO will compile them to static libraries and link to executable file.
|
||||
|
||||
The source code of each library should be placed in separate directory, like
|
||||
"lib/private_lib/[here are source files]".
|
||||
|
||||
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||
|
||||
|--lib
|
||||
| |--Bar
|
||||
| | |--docs
|
||||
| | |--examples
|
||||
| | |--src
|
||||
| | |- Bar.c
|
||||
| | |- Bar.h
|
||||
| |--Foo
|
||||
| | |- Foo.c
|
||||
| | |- Foo.h
|
||||
| |- readme.txt --> THIS FILE
|
||||
|- platformio.ini
|
||||
|--src
|
||||
|- main.c
|
||||
|
||||
Then in `src/main.c` you should use:
|
||||
|
||||
#include <Foo.h>
|
||||
#include <Bar.h>
|
||||
|
||||
// rest H/C/CPP code
|
||||
|
||||
PlatformIO will find your libraries automatically, configure preprocessor's
|
||||
include paths and build them.
|
||||
|
||||
More information about PlatformIO Library Dependency Finder
|
||||
- http://docs.platformio.org/page/librarymanager/ldf.html
|
||||
@@ -395,8 +395,6 @@ inline void HAL_adc_init() {
|
||||
// AVR compatibility
|
||||
#define strtof strtod
|
||||
|
||||
#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment
|
||||
|
||||
/**
|
||||
* set_pwm_frequency
|
||||
* Sets the frequency of the timer corresponding to the provided pin
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
#include "../../inc/MarlinConfigPre.h"
|
||||
|
||||
#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
|
||||
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_PWM
|
||||
|
||||
#include "HAL.h"
|
||||
|
||||
@@ -278,5 +278,5 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255
|
||||
}
|
||||
}
|
||||
|
||||
#endif // NEEDS_HARDWARE_PWM
|
||||
#endif // FAST_PWM_FAN || SPINDLE_LASER_PWM
|
||||
#endif // __AVR__
|
||||
|
||||
@@ -197,8 +197,6 @@ void HAL_idletask();
|
||||
#define PLATFORM_M997_SUPPORT
|
||||
void flashFirmware(const int16_t);
|
||||
|
||||
#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment
|
||||
|
||||
/**
|
||||
* set_pwm_frequency
|
||||
* Set the frequency of the timer corresponding to the provided pin
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#include "../../inc/MarlinConfigPre.h"
|
||||
|
||||
#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
|
||||
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_PWM
|
||||
|
||||
#include <pwm.h>
|
||||
|
||||
|
||||
+45
-76
@@ -227,7 +227,7 @@ bool wait_for_heatup = true;
|
||||
|
||||
// Inactivity shutdown
|
||||
millis_t max_inactive_time, // = 0
|
||||
stepper_inactive_time = SEC_TO_MS(DEFAULT_STEPPER_DEACTIVE_TIME);
|
||||
stepper_inactive_time = (DEFAULT_STEPPER_DEACTIVE_TIME) * 1000UL;
|
||||
|
||||
#if PIN_EXISTS(CHDK)
|
||||
extern millis_t chdk_timeout;
|
||||
@@ -420,11 +420,7 @@ void startOrResumeJob() {
|
||||
#if DISABLED(SD_ABORT_NO_COOLDOWN)
|
||||
thermalManager.disable_all_heaters();
|
||||
#endif
|
||||
#if !HAS_CUTTER
|
||||
thermalManager.zero_fan_speeds();
|
||||
#else
|
||||
cutter.kill(); // Full cutter shutdown including ISR control
|
||||
#endif
|
||||
thermalManager.zero_fan_speeds();
|
||||
wait_for_heatup = false;
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
recovery.purge();
|
||||
@@ -443,6 +439,7 @@ void startOrResumeJob() {
|
||||
|
||||
/**
|
||||
* Minimal management of Marlin's core activities:
|
||||
* - Check for Filament Runout
|
||||
* - Keep the command buffer full
|
||||
* - Check for maximum inactive time between commands
|
||||
* - Check for maximum inactive time between stepper commands
|
||||
@@ -453,8 +450,13 @@ void startOrResumeJob() {
|
||||
* - Check if an idle but hot extruder needs filament extruded (EXTRUDER_RUNOUT_PREVENT)
|
||||
* - Pulse FET_SAFETY_PIN if it exists
|
||||
*/
|
||||
|
||||
inline void manage_inactivity(const bool ignore_stepper_queue=false) {
|
||||
|
||||
#if HAS_FILAMENT_SENSOR
|
||||
runout.run();
|
||||
#endif
|
||||
|
||||
if (queue.length < BUFSIZE) queue.get_available_commands();
|
||||
|
||||
const millis_t ms = millis();
|
||||
@@ -543,7 +545,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
|
||||
|
||||
#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
|
||||
if (thermalManager.degHotend(active_extruder) > EXTRUDER_RUNOUT_MINTEMP
|
||||
&& ELAPSED(ms, gcode.previous_move_ms + SEC_TO_MS(EXTRUDER_RUNOUT_SECONDS))
|
||||
&& ELAPSED(ms, gcode.previous_move_ms + (EXTRUDER_RUNOUT_SECONDS) * 1000UL)
|
||||
&& !planner.has_blocks_queued()
|
||||
) {
|
||||
#if ENABLED(SWITCHING_EXTRUDER)
|
||||
@@ -638,53 +640,9 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Standard idle routine keeps the machine alive:
|
||||
* - Core Marlin activities
|
||||
* - Manage heaters (and Watchdog)
|
||||
* - Max7219 heartbeat, animation, etc.
|
||||
*
|
||||
* Only after setup() is complete:
|
||||
* - Handle filament runout sensors
|
||||
* - Run HAL idle tasks
|
||||
* - Handle Power-Loss Recovery
|
||||
* - Run StallGuard endstop checks
|
||||
* - Handle SD Card insert / remove
|
||||
* - Handle USB Flash Drive insert / remove
|
||||
* - Announce Host Keepalive state (if any)
|
||||
* - Update the Print Job Timer state
|
||||
* - Update the Beeper queue
|
||||
* - Read Buttons and Update the LCD
|
||||
* - Run i2c Position Encoders
|
||||
* - Auto-report Temperatures / SD Status
|
||||
* - Update the Prusa MMU2
|
||||
* - Handle Joystick jogging
|
||||
* Standard idle routine keeps the machine alive
|
||||
*/
|
||||
void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
|
||||
// Core Marlin activities
|
||||
manage_inactivity(TERN_(ADVANCED_PAUSE_FEATURE, no_stepper_sleep));
|
||||
|
||||
// Manage Heaters (and Watchdog)
|
||||
thermalManager.manage_heater();
|
||||
|
||||
// Max7219 heartbeat, animation, etc
|
||||
#if ENABLED(MAX7219_DEBUG)
|
||||
max7219.idle_tasks();
|
||||
#endif
|
||||
|
||||
// Return if setup() isn't completed
|
||||
if (marlin_state == MF_INITIALIZING) return;
|
||||
|
||||
// Handle filament runout sensors
|
||||
#if HAS_FILAMENT_SENSOR
|
||||
runout.run();
|
||||
#endif
|
||||
|
||||
// Run HAL idle tasks
|
||||
#ifdef HAL_IDLETASK
|
||||
HAL_idletask();
|
||||
#endif
|
||||
|
||||
// Handle Power-Loss Recovery
|
||||
#if ENABLED(POWER_LOSS_RECOVERY) && PIN_EXISTS(POWER_LOSS)
|
||||
recovery.outage();
|
||||
@@ -698,21 +656,29 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
if (endstops.tmc_spi_homing_check()) break;
|
||||
#endif
|
||||
|
||||
// Handle SD Card insert / remove
|
||||
#if ENABLED(SDSUPPORT)
|
||||
card.manage_media();
|
||||
// Max7219 heartbeat, animation, etc.
|
||||
#if ENABLED(MAX7219_DEBUG)
|
||||
max7219.idle_tasks();
|
||||
#endif
|
||||
|
||||
// Handle USB Flash Drive insert / remove
|
||||
#if ENABLED(USB_FLASH_DRIVE_SUPPORT)
|
||||
Sd2Card::idle();
|
||||
#endif
|
||||
// Read Buttons and Update the LCD
|
||||
ui.update();
|
||||
|
||||
// Announce Host Keepalive state (if any)
|
||||
#if ENABLED(HOST_KEEPALIVE_FEATURE)
|
||||
gcode.host_keepalive();
|
||||
#endif
|
||||
|
||||
// Core Marlin activities
|
||||
manage_inactivity(
|
||||
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
||||
no_stepper_sleep
|
||||
#endif
|
||||
);
|
||||
|
||||
// Manage heaters (and Watchdog)
|
||||
thermalManager.manage_heater();
|
||||
|
||||
// Update the Print Job Timer state
|
||||
#if ENABLED(PRINTCOUNTER)
|
||||
print_job_timer.tick();
|
||||
@@ -723,9 +689,6 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
buzzer.tick();
|
||||
#endif
|
||||
|
||||
// Read Buttons and Update the LCD
|
||||
ui.update();
|
||||
|
||||
// Run i2c Position Encoders
|
||||
#if ENABLED(I2C_POSITION_ENCODERS)
|
||||
static millis_t i2cpem_next_update_ms;
|
||||
@@ -738,6 +701,11 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
}
|
||||
#endif
|
||||
|
||||
// Run HAL idle tasks
|
||||
#ifdef HAL_IDLETASK
|
||||
HAL_idletask();
|
||||
#endif
|
||||
|
||||
// Auto-report Temperatures / SD Status
|
||||
#if HAS_AUTO_REPORTING
|
||||
if (!gcode.autoreport_paused) {
|
||||
@@ -750,6 +718,11 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
}
|
||||
#endif
|
||||
|
||||
// Handle USB Flash Drive insert / remove
|
||||
#if ENABLED(USB_FLASH_DRIVE_SUPPORT)
|
||||
Sd2Card::idle();
|
||||
#endif
|
||||
|
||||
// Update the Prusa MMU2
|
||||
#if ENABLED(PRUSA_MMU2)
|
||||
mmu2.mmu_loop();
|
||||
@@ -768,10 +741,6 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
|
||||
void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
|
||||
thermalManager.disable_all_heaters();
|
||||
|
||||
#if HAS_CUTTER
|
||||
cutter.kill(); // Full cutter shutdown including ISR control
|
||||
#endif
|
||||
|
||||
SERIAL_ERROR_MSG(STR_ERR_KILLED);
|
||||
|
||||
#if HAS_DISPLAY
|
||||
@@ -801,10 +770,6 @@ void minkill(const bool steppers_off/*=false*/) {
|
||||
// Reiterate heaters off
|
||||
thermalManager.disable_all_heaters();
|
||||
|
||||
#if HAS_CUTTER
|
||||
cutter.kill(); // Reiterate cutter shutdown
|
||||
#endif
|
||||
|
||||
// Power off all steppers (for M112) or just the E steppers
|
||||
steppers_off ? disable_all_steppers() : disable_e_steppers();
|
||||
|
||||
@@ -824,14 +789,14 @@ void minkill(const bool steppers_off/*=false*/) {
|
||||
// Wait for kill to be pressed
|
||||
while (READ(KILL_PIN)) watchdog_refresh();
|
||||
|
||||
void (*resetFunc)() = 0; // Declare resetFunc() at address 0
|
||||
void (*resetFunc)() = 0; // Declare resetFunc() at address 0
|
||||
resetFunc(); // Jump to address 0
|
||||
|
||||
#else
|
||||
#else // !HAS_KILL
|
||||
|
||||
for (;;) watchdog_refresh(); // Wait for reset
|
||||
for (;;) watchdog_refresh(); // Wait for reset
|
||||
|
||||
#endif
|
||||
#endif // !HAS_KILL
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1006,8 +971,8 @@ void setup() {
|
||||
SETUP_RUN(ui.show_bootscreen());
|
||||
#endif
|
||||
|
||||
#if BOTH(SDSUPPORT, SDCARD_EEPROM_EMULATION)
|
||||
SETUP_RUN(card.mount()); // Mount media with settings before first_load
|
||||
#if ENABLED(SDSUPPORT) && defined(SDCARD_CONNECTION) && !SD_CONNECTION_IS(LCD)
|
||||
SETUP_RUN(card.mount()); // Mount onboard / custom SD card before settings.first_load
|
||||
#endif
|
||||
|
||||
SETUP_RUN(settings.first_load()); // Load data from EEPROM if available (or use defaults)
|
||||
@@ -1174,6 +1139,10 @@ void setup() {
|
||||
queue.inject_P(PSTR(STARTUP_COMMANDS));
|
||||
#endif
|
||||
|
||||
#if ENABLED(INIT_SDCARD_ON_BOOT) && !HAS_SPI_LCD
|
||||
SETUP_RUN(card.beginautostart());
|
||||
#endif
|
||||
|
||||
#if ENABLED(HOST_PROMPT_SUPPORT)
|
||||
SETUP_RUN(host_action_prompt_end());
|
||||
#endif
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
#define BOARD_BLACK_STM32F407ZE 4206 // BLACK_STM32F407ZE
|
||||
#define BOARD_STEVAL_3DP001V1 4207 // STEVAL-3DP001V1 3D PRINTER BOARD
|
||||
#define BOARD_BTT_SKR_PRO_V1_1 4208 // BigTreeTech SKR Pro v1.1 (STM32F407ZG)
|
||||
#define BOARD_BTT_BTT002_V1_0 4209 // BigTreeTech BTT002 v1.0 (STM32F407VG)
|
||||
#define BOARD_BTT_BTT002_V1_0 4209 // BigTreeTech BTT002 v1.0 (STM32F407VE)
|
||||
#define BOARD_BTT_GTR_V1_0 4210 // BigTreeTech GTR v1.0 (STM32F407IGT)
|
||||
#define BOARD_LERDGE_K 4211 // Lerdge K (STM32F407ZG)
|
||||
#define BOARD_LERDGE_X 4212 // Lerdge X (STM32F407VE)
|
||||
|
||||
@@ -174,6 +174,15 @@
|
||||
// Defines that can't be evaluated now
|
||||
#define HAS_TMC_SW_SERIAL ANY_AXIS_HAS(SW_SERIAL)
|
||||
|
||||
//
|
||||
// Stretching 'drivers.h' to include LPC/SAMD51 SD options
|
||||
//
|
||||
#define _SDCARD_LCD 1
|
||||
#define _SDCARD_ONBOARD 2
|
||||
#define _SDCARD_CUSTOM_CABLE 3
|
||||
#define _SDCARD_ID(V) _CAT(_SDCARD_, V)
|
||||
#define SD_CONNECTION_IS(V) (_SDCARD_ID(SDCARD_CONNECTION) == _SDCARD_ID(V))
|
||||
|
||||
#if HAS_DRIVER(L6470) || HAS_DRIVER(L6474) || HAS_DRIVER(L6480) || HAS_DRIVER(POWERSTEP01)
|
||||
#define HAS_L64XX 1
|
||||
#endif
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
#define STR_INVALID_POS_SLOT "Invalid slot. Total: "
|
||||
|
||||
#define STR_SD_CANT_OPEN_SUBDIR "Cannot open subdir "
|
||||
#define STR_SD_INIT_FAIL "No SD card"
|
||||
#define STR_SD_INIT_FAIL "SD init fail"
|
||||
#define STR_SD_VOL_INIT_FAIL "volume.init failed"
|
||||
#define STR_SD_OPENROOT_FAIL "openRoot failed"
|
||||
#define STR_SD_CARD_OK "SD card ok"
|
||||
|
||||
@@ -25,9 +25,5 @@
|
||||
|
||||
typedef uint32_t millis_t;
|
||||
|
||||
#define SEC_TO_MS(N) millis_t((N)*1000UL)
|
||||
#define MIN_TO_MS(N) SEC_TO_MS((N)*60UL)
|
||||
#define MS_TO_SEC(N) millis_t((N)/1000UL)
|
||||
|
||||
#define PENDING(NOW,SOON) ((int32_t)(NOW-(SOON))<0)
|
||||
#define ELAPSED(NOW,SOON) (!PENDING(NOW,SOON))
|
||||
|
||||
@@ -77,7 +77,3 @@ typedef const char Language_Str[];
|
||||
#define GET_TEXT_F(MSG) (const __FlashStringHelper*)GET_TEXT(MSG)
|
||||
|
||||
#define MSG_CONCAT(A,B) pgm_p_pair_t(GET_TEXT(A),GET_TEXT(B))
|
||||
|
||||
#define MSG_1_LINE(A) A "\0" "\0"
|
||||
#define MSG_2_LINE(A,B) A "\0" B "\0"
|
||||
#define MSG_3_LINE(A,B,C) A "\0" B "\0" C
|
||||
|
||||
@@ -49,13 +49,14 @@
|
||||
void unified_bed_leveling::report_current_mesh() {
|
||||
if (!leveling_is_valid()) return;
|
||||
SERIAL_ECHO_MSG(" G29 I99");
|
||||
GRID_LOOP(x, y)
|
||||
if (!isnan(z_values[x][y])) {
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOPAIR(" M421 I", int(x), " J", int(y));
|
||||
SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z_values[x][y], 4);
|
||||
serial_delay(75); // Prevent Printrun from exploding
|
||||
}
|
||||
LOOP_L_N(x, GRID_MAX_POINTS_X)
|
||||
for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++)
|
||||
if (!isnan(z_values[x][y])) {
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOPAIR(" M421 I", int(x), " J", int(y));
|
||||
SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z_values[x][y], 4);
|
||||
serial_delay(75); // Prevent Printrun from exploding
|
||||
}
|
||||
}
|
||||
|
||||
void unified_bed_leveling::report_state() {
|
||||
|
||||
@@ -776,16 +776,12 @@
|
||||
: find_closest_mesh_point_of_type(INVALID, near, true);
|
||||
|
||||
if (best.pos.x >= 0) { // mesh point found and is reachable by probe
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMeshUpdate(best.pos, ExtUI::PROBE_START);
|
||||
#endif
|
||||
const float measured_z = probe.probe_at_point(
|
||||
best.meshpos(),
|
||||
stow_probe ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level
|
||||
);
|
||||
z_values[best.pos.x][best.pos.y] = measured_z;
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMeshUpdate(best.pos, ExtUI::PROBE_FINISH);
|
||||
ExtUI::onMeshUpdate(best.pos, measured_z);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ void ControllerFan::update() {
|
||||
// - If AutoMode is on and steppers have been enabled for CONTROLLERFAN_IDLE_TIME seconds.
|
||||
// - If System is on idle and idle fan speed settings is activated.
|
||||
set_fan_speed(
|
||||
settings.auto_mode && lastMotorOn && PENDING(ms, lastMotorOn + SEC_TO_MS(settings.duration))
|
||||
settings.auto_mode && lastMotorOn && PENDING(ms, lastMotorOn + settings.duration * 1000UL)
|
||||
? settings.active_speed : settings.idle_speed
|
||||
);
|
||||
|
||||
|
||||
@@ -485,7 +485,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
|
||||
#endif
|
||||
|
||||
// Start the heater idle timers
|
||||
const millis_t nozzle_timeout = SEC_TO_MS(PAUSE_PARK_NOZZLE_TIMEOUT);
|
||||
const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL;
|
||||
|
||||
HOTEND_LOOP() thermalManager.hotend_idle[e].start(nozzle_timeout);
|
||||
|
||||
@@ -499,10 +499,10 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
|
||||
// Wait for filament insert by user and press button
|
||||
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
||||
#if ENABLED(HOST_PROMPT_SUPPORT)
|
||||
host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_NOZZLE_PARKED), CONTINUE_STR);
|
||||
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Nozzle Parked"), CONTINUE_STR);
|
||||
#endif
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_NOZZLE_PARKED));
|
||||
ExtUI::onUserConfirmRequired_P(PSTR("Nozzle Parked"));
|
||||
#endif
|
||||
wait_for_user = true; // LCD click or M108 will clear this
|
||||
while (wait_for_user) {
|
||||
@@ -523,20 +523,20 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
|
||||
SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT));
|
||||
|
||||
#if ENABLED(HOST_PROMPT_SUPPORT)
|
||||
host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_HEATER_TIMEOUT), GET_TEXT(MSG_REHEAT));
|
||||
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("HeaterTimeout"), PSTR("Reheat"));
|
||||
#endif
|
||||
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_HEATER_TIMEOUT));
|
||||
ExtUI::onUserConfirmRequired_P(PSTR("HeaterTimeout"));
|
||||
#endif
|
||||
|
||||
wait_for_user_response(0, true); // Wait for LCD click or M108
|
||||
|
||||
#if ENABLED(HOST_PROMPT_SUPPORT)
|
||||
host_prompt_do(PROMPT_INFO, GET_TEXT(MSG_REHEATING));
|
||||
host_prompt_do(PROMPT_INFO, PSTR("Reheating"));
|
||||
#endif
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onStatusChanged(GET_TEXT(MSG_REHEATING));
|
||||
ExtUI::onStatusChanged(PSTR("Reheating..."));
|
||||
#endif
|
||||
|
||||
// Re-enable the heaters if they timed out
|
||||
@@ -549,7 +549,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
|
||||
show_continue_prompt(is_reload);
|
||||
|
||||
// Start the heater idle timers
|
||||
const millis_t nozzle_timeout = SEC_TO_MS(PAUSE_PARK_NOZZLE_TIMEOUT);
|
||||
const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL;
|
||||
|
||||
HOTEND_LOOP() thermalManager.hotend_idle[e].start(nozzle_timeout);
|
||||
#if ENABLED(HOST_PROMPT_SUPPORT)
|
||||
|
||||
@@ -98,7 +98,7 @@ void Power::check() {
|
||||
nextPowerCheck = ms + 2500UL;
|
||||
if (is_power_needed())
|
||||
power_on();
|
||||
else if (!lastPowerOn || ELAPSED(ms, lastPowerOn + SEC_TO_MS(POWER_TIMEOUT)))
|
||||
else if (!lastPowerOn || ELAPSED(ms, lastPowerOn + (POWER_TIMEOUT) * 1000UL))
|
||||
power_off();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
|
||||
ProbeTempComp temp_comp;
|
||||
|
||||
int16_t ProbeTempComp::z_offsets_probe[cali_info_init[TSI_PROBE].measurements], // = {0}
|
||||
ProbeTempComp::z_offsets_bed[cali_info_init[TSI_BED].measurements]; // = {0}
|
||||
int16_t ProbeTempComp::z_offsets_probe[ProbeTempComp::cali_info_init[TSI_PROBE].measurements], // = {0}
|
||||
ProbeTempComp::z_offsets_bed[ProbeTempComp::cali_info_init[TSI_BED].measurements]; // = {0}
|
||||
|
||||
#if ENABLED(USE_TEMP_EXT_COMPENSATION)
|
||||
int16_t ProbeTempComp::z_offsets_ext[cali_info_init[TSI_EXT].measurements]; // = {0}
|
||||
int16_t ProbeTempComp::z_offsets_ext[ProbeTempComp::cali_info_init[TSI_EXT].measurements]; // = {0}
|
||||
#endif
|
||||
|
||||
int16_t *ProbeTempComp::sensor_z_offsets[TSI_COUNT] = {
|
||||
@@ -44,9 +44,9 @@ int16_t *ProbeTempComp::sensor_z_offsets[TSI_COUNT] = {
|
||||
};
|
||||
|
||||
const temp_calib_t ProbeTempComp::cali_info[TSI_COUNT] = {
|
||||
cali_info_init[TSI_PROBE], cali_info_init[TSI_BED]
|
||||
ProbeTempComp::cali_info_init[TSI_PROBE], ProbeTempComp::cali_info_init[TSI_BED]
|
||||
#if ENABLED(USE_TEMP_EXT_COMPENSATION)
|
||||
, cali_info_init[TSI_EXT]
|
||||
, ProbeTempComp::cali_info_init[TSI_EXT]
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -44,28 +44,30 @@ typedef struct {
|
||||
* Z-probes like the P.I.N.D.A V2 allow for compensation of
|
||||
* measurement errors/shifts due to changed temperature.
|
||||
*/
|
||||
|
||||
static constexpr temp_calib_t cali_info_init[TSI_COUNT] = {
|
||||
{ 10, 5, 30, 30 + 10 * 5 }, // Probe
|
||||
{ 10, 5, 60, 60 + 10 * 5 }, // Bed
|
||||
#if ENABLED(USE_TEMP_EXT_COMPENSATION)
|
||||
{ 20, 5, 180, 180 + 5 * 20 } // Extruder
|
||||
#endif
|
||||
};
|
||||
|
||||
class ProbeTempComp {
|
||||
public:
|
||||
|
||||
static constexpr temp_calib_t cali_info_init[TSI_COUNT] = {
|
||||
{ 10, 5, 30, 30 + 10 * 5 }, // Probe
|
||||
{ 10, 5, 60, 60 + 10 * 5 }, // Bed
|
||||
#if ENABLED(USE_TEMP_EXT_COMPENSATION)
|
||||
{ 20, 5, 180, 180 + 5 * 20 } // Extruder
|
||||
#endif
|
||||
};
|
||||
static const temp_calib_t cali_info[TSI_COUNT];
|
||||
|
||||
// Where to park nozzle to wait for probe cooldown
|
||||
static constexpr xyz_pos_t park_point = PTC_PARK_POS;
|
||||
static constexpr float park_point_x = PTC_PARK_POS_X,
|
||||
park_point_y = PTC_PARK_POS_Y,
|
||||
park_point_z = PTC_PARK_POS_Z,
|
||||
// XY coordinates of nozzle for probing the bed
|
||||
measure_point_x = PTC_PROBE_POS_X, // Coordinates to probe
|
||||
measure_point_y = PTC_PROBE_POS_Y;
|
||||
//measure_point_x = 12.0f, // Coordinates to probe on MK52 magnetic heatbed
|
||||
//measure_point_y = 7.3f;
|
||||
|
||||
// XY coordinates of nozzle for probing the bed
|
||||
static constexpr xy_pos_t measure_point = PTC_PROBE_POS; // Coordinates to probe
|
||||
//measure_point = { 12.0f, 7.3f }; // Coordinates for the MK52 magnetic heatbed
|
||||
|
||||
static constexpr int probe_calib_bed_temp = BED_MAXTEMP - 10, // Bed temperature while calibrating probe
|
||||
static constexpr int max_bed_temp = PTC_MAX_BED_TEMP, // Max temperature to avoid heating errors
|
||||
probe_calib_bed_temp = max_bed_temp, // Bed temperature while calibrating probe
|
||||
bed_calib_probe_temp = 30; // Probe temperature while calibrating bed
|
||||
|
||||
static int16_t *sensor_z_offsets[TSI_COUNT],
|
||||
|
||||
@@ -32,17 +32,10 @@
|
||||
|
||||
SpindleLaser cutter;
|
||||
|
||||
cutter_power_t SpindleLaser::power;
|
||||
bool SpindleLaser::isOn; // state to determine when to apply setPower to power
|
||||
cutter_setPower_t SpindleLaser::setPower = interpret_power(SPEED_POWER_MIN); // spindle/laser speed/power control in PWM, Percentage or RPM
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
cutter_frequency_t SpindleLaser::frequency; // setting PWM frequency; range: 2K - 50K
|
||||
#endif
|
||||
cutter_power_t SpindleLaser::power; // = 0
|
||||
|
||||
#define SPINDLE_LASER_PWM_OFF ((SPINDLE_LASER_PWM_INVERT) ? 255 : 0)
|
||||
|
||||
//
|
||||
// Init the cutter to a safe OFF state
|
||||
//
|
||||
void SpindleLaser::init() {
|
||||
OUT_WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_HIGH); // Init spindle to off
|
||||
#if ENABLED(SPINDLE_CHANGE_DIR)
|
||||
@@ -52,39 +45,41 @@ void SpindleLaser::init() {
|
||||
SET_PWM(SPINDLE_LASER_PWM_PIN);
|
||||
analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // set to lowest speed
|
||||
#endif
|
||||
#if ENABLED(HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY)
|
||||
set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY);
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
frequency = SPINDLE_LASER_FREQUENCY;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
|
||||
/**
|
||||
* Set the cutter PWM directly to the given ocr value
|
||||
**/
|
||||
* ocr_val_mode() is used for debugging and to get the points needed to compute the RPM vs ocr_val line
|
||||
*
|
||||
* it accepts inputs of 0-255
|
||||
*/
|
||||
void SpindleLaser::set_ocr(const uint8_t ocr) {
|
||||
WRITE(SPINDLE_LASER_ENA_PIN, SPINDLE_LASER_ACTIVE_HIGH); // turn spindle on
|
||||
WRITE(SPINDLE_LASER_ENA_PIN, SPINDLE_LASER_ACTIVE_HIGH); // turn spindle on (active low)
|
||||
analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
// Set cutter ON state (and PWM) to the given cutter power value
|
||||
//
|
||||
void SpindleLaser::apply_power(const cutter_power_t inpow) {
|
||||
static cutter_power_t last_power_applied = 0;
|
||||
if (inpow == last_power_applied) return;
|
||||
last_power_applied = inpow;
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
if (enabled())
|
||||
set_ocr(translate_power(inpow));
|
||||
if (enabled()) {
|
||||
#define _scaled(F) ((F - (SPEED_POWER_INTERCEPT)) * inv_slope)
|
||||
constexpr float inv_slope = RECIPROCAL(SPEED_POWER_SLOPE),
|
||||
min_ocr = _scaled(SPEED_POWER_MIN),
|
||||
max_ocr = _scaled(SPEED_POWER_MAX);
|
||||
int16_t ocr_val;
|
||||
if (inpow <= SPEED_POWER_MIN) ocr_val = min_ocr; // Use minimum if set below
|
||||
else if (inpow >= SPEED_POWER_MAX) ocr_val = max_ocr; // Use maximum if set above
|
||||
else ocr_val = _scaled(inpow); // Use calculated OCR value
|
||||
set_ocr(ocr_val & 0xFF); // ...limited to Atmel PWM max
|
||||
}
|
||||
else {
|
||||
WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_HIGH); // Turn spindle off
|
||||
analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Only write low byte
|
||||
WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_HIGH); // Turn spindle off (active low)
|
||||
analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Only write low byte
|
||||
}
|
||||
#else
|
||||
WRITE(SPINDLE_LASER_ENA_PIN, (SPINDLE_LASER_ACTIVE_HIGH) ? enabled() : !enabled());
|
||||
@@ -93,10 +88,6 @@ void SpindleLaser::apply_power(const cutter_power_t inpow) {
|
||||
|
||||
#if ENABLED(SPINDLE_CHANGE_DIR)
|
||||
|
||||
//
|
||||
// Set the spindle direction and apply immediately
|
||||
// Stop on direction change if SPINDLE_STOP_ON_DIR_CHANGE is enabled
|
||||
//
|
||||
void SpindleLaser::set_direction(const bool reverse) {
|
||||
const bool dir_state = (reverse == SPINDLE_INVERT_DIR); // Forward (M3) HIGH when not inverted
|
||||
#if ENABLED(SPINDLE_STOP_ON_DIR_CHANGE)
|
||||
|
||||
@@ -28,98 +28,55 @@
|
||||
|
||||
#include "../inc/MarlinConfig.h"
|
||||
|
||||
#include "spindle_laser_types.h"
|
||||
#if ENABLED(SPINDLE_FEATURE)
|
||||
#define _MSG_CUTTER(M) MSG_SPINDLE_##M
|
||||
#else
|
||||
#define _MSG_CUTTER(M) MSG_LASER_##M
|
||||
#endif
|
||||
#define MSG_CUTTER(M) _MSG_CUTTER(M)
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
#include "../module/planner.h"
|
||||
#if SPEED_POWER_MAX > 255
|
||||
typedef uint16_t cutter_power_t;
|
||||
#define CUTTER_MENU_TYPE uint16_5
|
||||
#else
|
||||
typedef uint8_t cutter_power_t;
|
||||
#define CUTTER_MENU_TYPE uint8
|
||||
#endif
|
||||
|
||||
class SpindleLaser {
|
||||
public:
|
||||
static bool isOn; // state to determine when to apply setPower to power
|
||||
static cutter_power_t power;
|
||||
static cutter_setPower_t setPower; // spindle/laser menu set power; in PWM, Percentage or RPM
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
static cutter_frequency_t frequency; // set PWM frequency; range: 2K-50K
|
||||
#endif
|
||||
|
||||
static cutter_setPower_t interpret_power(const float pwr) { // convert speed/power to configured PWM, Percentage or RPM in relative or normal range
|
||||
#if CUTTER_DISPLAY_IS(PERCENT)
|
||||
return (pwr / SPEED_POWER_MAX) * 100; // to percent
|
||||
#elif CUTTER_DISPLAY_IS(RPM) // to RPM is unaltered
|
||||
return pwr;
|
||||
#else // to PWM
|
||||
#if ENABLED(CUTTER_POWER_RELATIVE)
|
||||
return (pwr - SPEED_POWER_MIN) / (SPEED_POWER_MAX - SPEED_POWER_MIN) * 255; // using rpm range as relative percentage
|
||||
#else
|
||||
return (pwr / SPEED_POWER_MAX) * 255;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
/**
|
||||
* Translate speed/power --> percentage --> PWM value
|
||||
**/
|
||||
static cutter_power_t translate_power(const float pwr) {
|
||||
float pwrpc;
|
||||
#if CUTTER_DISPLAY_IS(PERCENT)
|
||||
pwrpc = pwr;
|
||||
#elif CUTTER_DISPLAY_IS(RPM) // RPM to percent
|
||||
#if ENABLED(CUTTER_POWER_RELATIVE)
|
||||
pwrpc = (pwr - SPEED_POWER_MIN) / (SPEED_POWER_MAX - SPEED_POWER_MIN) * 100;
|
||||
#else
|
||||
pwrpc = pwr / SPEED_POWER_MAX * 100;
|
||||
#endif
|
||||
#else
|
||||
return pwr; // PWM
|
||||
#endif
|
||||
|
||||
#if ENABLED(SPINDLE_FEATURE)
|
||||
#if ENABLED(CUTTER_POWER_RELATIVE)
|
||||
constexpr float spmin = 0;
|
||||
#else
|
||||
constexpr float spmin = SPEED_POWER_MIN / SPEED_POWER_MAX * 100; // convert to percentage
|
||||
#endif
|
||||
constexpr float spmax = 100;
|
||||
#else
|
||||
constexpr float spmin = SPEED_POWER_MIN;
|
||||
constexpr float spmax = SPEED_POWER_MAX;
|
||||
#endif
|
||||
|
||||
constexpr float inv_slope = RECIPROCAL(SPEED_POWER_SLOPE),
|
||||
min_ocr = (spmin - (SPEED_POWER_INTERCEPT)) * inv_slope, // Minimum allowed
|
||||
max_ocr = (spmax - (SPEED_POWER_INTERCEPT)) * inv_slope; // Maximum allowed
|
||||
float ocr_val;
|
||||
if (pwrpc < spmin) ocr_val = min_ocr; // Use minimum if set below
|
||||
else if (pwrpc > spmax) ocr_val = max_ocr; // Use maximum if set above
|
||||
else ocr_val = (pwrpc - (SPEED_POWER_INTERCEPT)) * inv_slope; // Use calculated OCR value
|
||||
return ocr_val; // ...limited to Atmel PWM max
|
||||
}
|
||||
static inline uint8_t powerPercent(const uint8_t pp) { return ui8_to_percent(pp); } // for display
|
||||
|
||||
static void init();
|
||||
|
||||
// Modifying this function should update everywhere
|
||||
static inline bool enabled(const cutter_power_t pwr) { return pwr > 0; }
|
||||
static inline bool enabled() { return enabled(power); }
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
static inline void refresh_frequency() { set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); }
|
||||
#endif
|
||||
static inline bool enabled() { return !!power; }
|
||||
|
||||
static inline void set_power(const cutter_power_t pwr) { power = pwr; }
|
||||
|
||||
static inline void refresh() { apply_power(power); }
|
||||
|
||||
static inline void set_enabled(const bool enable) {
|
||||
const bool was = enabled();
|
||||
set_power(enable ? 255 : 0);
|
||||
if (was != enable) power_delay();
|
||||
}
|
||||
|
||||
static void apply_power(const cutter_power_t inpow);
|
||||
|
||||
FORCE_INLINE static void refresh() { apply_power(power); }
|
||||
FORCE_INLINE static void set_power(const cutter_power_t pwr) { power = pwr; refresh(); }
|
||||
//static bool active() { return READ(SPINDLE_LASER_ENA_PIN) == SPINDLE_LASER_ACTIVE_HIGH; }
|
||||
|
||||
static inline void set_enabled(const bool enable) { set_power(enable ? (power ?: interpret_power(SPEED_POWER_STARTUP)) : 0); }
|
||||
static void update_output();
|
||||
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
static void set_ocr(const uint8_t ocr);
|
||||
static inline void set_ocr_power(const uint8_t pwr) { power = pwr; set_ocr(pwr); }
|
||||
// static uint8_t translate_power(const cutter_power_t pwr); // Used by update output for power->OCR translation
|
||||
static inline void set_ocr_power(const cutter_power_t pwr) { power = pwr; set_ocr(pwr); }
|
||||
#endif
|
||||
|
||||
// Wait for spindle to spin up or spin down
|
||||
static inline void power_delay(const bool on) {
|
||||
#if DISABLED(LASER_POWER_INLINE)
|
||||
safe_delay(on ? SPINDLE_LASER_POWERUP_DELAY : SPINDLE_LASER_POWERDOWN_DELAY);
|
||||
static inline void power_delay() {
|
||||
#if SPINDLE_LASER_POWERUP_DELAY || SPINDLE_LASER_POWERDOWN_DELAY
|
||||
safe_delay(enabled() ? SPINDLE_LASER_POWERUP_DELAY : SPINDLE_LASER_POWERDOWN_DELAY);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -129,44 +86,10 @@ public:
|
||||
static inline void set_direction(const bool) {}
|
||||
#endif
|
||||
|
||||
static inline void disable() { isOn = false; set_enabled(false); }
|
||||
#if HAS_LCD_MENU
|
||||
static inline void enable_forward() { isOn = true; setPower ? (power = setPower) : (setPower = interpret_power(SPEED_POWER_STARTUP)); set_direction(false); set_enabled(true); }
|
||||
static inline void enable_reverse() { isOn = true; setPower ? (power = setPower) : (setPower = interpret_power(SPEED_POWER_STARTUP)); set_direction(true); set_enabled(true); }
|
||||
#endif
|
||||
static inline void disable() { set_enabled(false); }
|
||||
static inline void enable_forward() { set_direction(false); set_enabled(true); }
|
||||
static inline void enable_reverse() { set_direction(true); set_enabled(true); }
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
// Force disengage planner power control
|
||||
static inline void inline_disable() { planner.settings.laser.status = 0; planner.settings.laser.power = 0; isOn = false;}
|
||||
|
||||
// Inline modes of all other functions; all enable planner inline power control
|
||||
static inline void inline_enabled(const bool enable) { enable ? inline_power(SPEED_POWER_STARTUP) : inline_ocr_power(0); }
|
||||
|
||||
static void inline_power(const cutter_power_t pwr) {
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
inline_ocr_power(translate_power(pwr));
|
||||
#else
|
||||
planner.settings.laser.status = enabled(pwr) ? 0x03 : 0x01;
|
||||
planner.settings.laser.power = pwr;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void inline_direction(const bool reverse) { UNUSED(reverse); } // TODO is this ever going to be needed
|
||||
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
static inline void inline_ocr_power(const uint8_t pwr) {
|
||||
planner.settings.laser.status = pwr ? 0x03 : 0x01;
|
||||
planner.settings.laser.power = pwr;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static inline void kill() {
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
inline_disable();
|
||||
#endif
|
||||
disable();
|
||||
}
|
||||
};
|
||||
|
||||
extern SpindleLaser cutter;
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
* feature/spindle_laser_types.h
|
||||
* Support for Laser Power or Spindle Power & Direction
|
||||
*/
|
||||
|
||||
#include "../inc/MarlinConfigPre.h"
|
||||
|
||||
#if ENABLED(SPINDLE_FEATURE)
|
||||
#define _MSG_CUTTER(M) MSG_SPINDLE_##M
|
||||
#else
|
||||
#define _MSG_CUTTER(M) MSG_LASER_##M
|
||||
#endif
|
||||
#define MSG_CUTTER(M) _MSG_CUTTER(M)
|
||||
#if CUTTER_DISPLAY_IS(RPM) && SPEED_POWER_MAX > 255
|
||||
#define cutter_power_t uint16_t
|
||||
#define cutter_setPower_t uint16_t
|
||||
#define CUTTER_MENU_POWER_TYPE uint16_5
|
||||
#else
|
||||
#define cutter_power_t uint8_t
|
||||
#define cutter_setPower_t uint8_t
|
||||
#define CUTTER_MENU_POWER_TYPE uint8
|
||||
#endif
|
||||
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
#define cutter_frequency_t uint16_t
|
||||
#define CUTTER_MENU_FREQUENCY_TYPE uint16_5
|
||||
#endif
|
||||
@@ -155,18 +155,21 @@ void GcodeSuite::M420() {
|
||||
|
||||
// Get the sum and average of all mesh values
|
||||
float mesh_sum = 0;
|
||||
GRID_LOOP(x, y) mesh_sum += Z_VALUES(x, y);
|
||||
for (uint8_t x = GRID_MAX_POINTS_X; x--;)
|
||||
for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
|
||||
mesh_sum += Z_VALUES(x, y);
|
||||
const float zmean = mesh_sum / float(GRID_MAX_POINTS);
|
||||
|
||||
#else
|
||||
|
||||
// Find the low and high mesh values
|
||||
float lo_val = 100, hi_val = -100;
|
||||
GRID_LOOP(x, y) {
|
||||
const float z = Z_VALUES(x, y);
|
||||
NOMORE(lo_val, z);
|
||||
NOLESS(hi_val, z);
|
||||
}
|
||||
for (uint8_t x = GRID_MAX_POINTS_X; x--;)
|
||||
for (uint8_t y = GRID_MAX_POINTS_Y; y--;) {
|
||||
const float z = Z_VALUES(x, y);
|
||||
NOMORE(lo_val, z);
|
||||
NOLESS(hi_val, z);
|
||||
}
|
||||
// Take the mean of the lowest and highest
|
||||
const float zmean = (lo_val + hi_val) / 2.0 + cval;
|
||||
|
||||
@@ -176,12 +179,13 @@ void GcodeSuite::M420() {
|
||||
if (!NEAR_ZERO(zmean)) {
|
||||
set_bed_leveling_enabled(false);
|
||||
// Subtract the mean from all values
|
||||
GRID_LOOP(x, y) {
|
||||
Z_VALUES(x, y) -= zmean;
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y));
|
||||
#endif
|
||||
}
|
||||
for (uint8_t x = GRID_MAX_POINTS_X; x--;)
|
||||
for (uint8_t y = GRID_MAX_POINTS_Y; y--;) {
|
||||
Z_VALUES(x, y) -= zmean;
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y));
|
||||
#endif
|
||||
}
|
||||
#if ENABLED(ABL_BILINEAR_SUBDIVISION)
|
||||
bed_level_virt_interpolate();
|
||||
#endif
|
||||
|
||||
@@ -103,19 +103,13 @@ void GcodeSuite::G76() {
|
||||
return false;
|
||||
};
|
||||
|
||||
auto g76_probe = [](const TempSensorID sid, uint16_t &targ, const xy_pos_t &nozpos) {
|
||||
auto g76_probe = [](const xy_pos_t &xypos) {
|
||||
do_blocking_move_to_z(5.0); // Raise nozzle before probing
|
||||
const float measured_z = probe.probe_at_point(nozpos, PROBE_PT_NONE, 0, false); // verbose=0, probe_relative=false
|
||||
const float measured_z = probe.probe_at_point(xypos, PROBE_PT_NONE, 0, false); // verbose=0, probe_relative=false
|
||||
if (isnan(measured_z))
|
||||
SERIAL_ECHOLNPGM("!Received NAN. Aborting.");
|
||||
else {
|
||||
else
|
||||
SERIAL_ECHOLNPAIR_F("Measured: ", measured_z);
|
||||
if (targ == cali_info_init[sid].start_temp)
|
||||
temp_comp.prepare_new_calibration(measured_z);
|
||||
else
|
||||
temp_comp.push_back_new_measurement(sid, measured_z);
|
||||
targ += cali_info_init[sid].temp_res;
|
||||
}
|
||||
return measured_z;
|
||||
};
|
||||
|
||||
@@ -131,9 +125,8 @@ void GcodeSuite::G76() {
|
||||
// Synchronize with planner
|
||||
planner.synchronize();
|
||||
|
||||
const xyz_pos_t parkpos = temp_comp.park_point,
|
||||
probe_pos_xyz = temp_comp.measure_point + xyz_pos_t({ 0.0f, 0.0f, 0.5f }),
|
||||
noz_pos_xyz = probe_pos_xyz - probe.offset_xy; // Nozzle position based on probe position
|
||||
const xyz_pos_t parkpos = { temp_comp.park_point_x, temp_comp.park_point_y, temp_comp.park_point_z };
|
||||
const xy_pos_t ppos = { temp_comp.measure_point_x, temp_comp.measure_point_y };
|
||||
|
||||
if (do_bed_cal || do_probe_cal) {
|
||||
// Ensure park position is reachable
|
||||
@@ -142,7 +135,7 @@ void GcodeSuite::G76() {
|
||||
SERIAL_ECHOLNPGM("!Park");
|
||||
else {
|
||||
// Ensure probe position is reachable
|
||||
reachable = probe.can_reach(probe_pos_xyz);
|
||||
reachable = probe.can_reach(ppos);
|
||||
if (!reachable) SERIAL_ECHOLNPGM("!Probe");
|
||||
}
|
||||
|
||||
@@ -156,6 +149,8 @@ void GcodeSuite::G76() {
|
||||
|
||||
remember_feedrate_scaling_off();
|
||||
|
||||
// Nozzle position based on probe position
|
||||
const xy_pos_t noz_pos = ppos - probe.offset_xy;
|
||||
|
||||
/******************************************
|
||||
* Calibrate bed temperature offsets
|
||||
@@ -164,13 +159,9 @@ void GcodeSuite::G76() {
|
||||
// Report temperatures every second and handle heating timeouts
|
||||
millis_t next_temp_report = millis() + 1000;
|
||||
|
||||
auto report_targets = [&](const uint16_t tb, const uint16_t tp) {
|
||||
SERIAL_ECHOLNPAIR("Target Bed:", tb, " Probe:", tp);
|
||||
};
|
||||
|
||||
if (do_bed_cal) {
|
||||
|
||||
uint16_t target_bed = cali_info_init[TSI_BED].start_temp,
|
||||
uint16_t target_bed = temp_comp.cali_info_init[TSI_BED].start_temp,
|
||||
target_probe = temp_comp.bed_calib_probe_temp;
|
||||
|
||||
SERIAL_ECHOLNPGM("Waiting for cooling.");
|
||||
@@ -185,25 +176,33 @@ void GcodeSuite::G76() {
|
||||
for (;;) {
|
||||
thermalManager.setTargetBed(target_bed);
|
||||
|
||||
report_targets(target_bed, target_probe);
|
||||
SERIAL_ECHOLNPAIR("Target Bed:", target_bed, " Probe:", target_probe);
|
||||
|
||||
// Park nozzle
|
||||
do_blocking_move_to(parkpos);
|
||||
|
||||
// Wait for heatbed to reach target temp and probe to cool below target temp
|
||||
if (wait_for_temps(target_bed, target_probe, next_temp_report, millis() + MIN_TO_MS(15))) {
|
||||
if (wait_for_temps(target_bed, target_probe, next_temp_report, millis() + 900UL * 1000UL)) {
|
||||
SERIAL_ECHOLNPGM("!Bed heating timeout.");
|
||||
break;
|
||||
}
|
||||
|
||||
// Move the nozzle to the probing point and wait for the probe to reach target temp
|
||||
do_blocking_move_to(noz_pos_xyz);
|
||||
do_blocking_move_to_xy(noz_pos);
|
||||
SERIAL_ECHOLNPGM("Waiting for probe heating.");
|
||||
while (thermalManager.degProbe() < target_probe)
|
||||
report_temps(next_temp_report);
|
||||
|
||||
const float measured_z = g76_probe(TSI_BED, target_bed, noz_pos_xyz);
|
||||
if (isnan(measured_z) || target_bed > BED_MAXTEMP - 10) break;
|
||||
const float measured_z = g76_probe(noz_pos);
|
||||
if (isnan(measured_z)) break;
|
||||
|
||||
if (target_bed == temp_comp.cali_info_init[TSI_BED].start_temp)
|
||||
temp_comp.prepare_new_calibration(measured_z);
|
||||
else
|
||||
temp_comp.push_back_new_measurement(TSI_BED, measured_z);
|
||||
|
||||
target_bed += temp_comp.cali_info_init[TSI_BED].temp_res;
|
||||
if (target_bed > temp_comp.max_bed_temp) break;
|
||||
}
|
||||
|
||||
SERIAL_ECHOLNPAIR("Retrieved measurements: ", temp_comp.get_index());
|
||||
@@ -232,9 +231,7 @@ void GcodeSuite::G76() {
|
||||
const uint16_t target_bed = temp_comp.probe_calib_bed_temp;
|
||||
thermalManager.setTargetBed(target_bed);
|
||||
|
||||
uint16_t target_probe = cali_info_init[TSI_PROBE].start_temp;
|
||||
|
||||
report_targets(target_bed, target_probe);
|
||||
uint16_t target_probe = temp_comp.cali_info_init[TSI_PROBE].start_temp;
|
||||
|
||||
// Wait for heatbed to reach target temp and probe to cool below target temp
|
||||
wait_for_temps(target_bed, target_probe, next_temp_report);
|
||||
@@ -247,7 +244,7 @@ void GcodeSuite::G76() {
|
||||
bool timeout = false;
|
||||
for (;;) {
|
||||
// Move probe to probing point and wait for it to reach target temperature
|
||||
do_blocking_move_to(noz_pos_xyz);
|
||||
do_blocking_move_to_xy(noz_pos);
|
||||
|
||||
SERIAL_ECHOLNPAIR("Waiting for probe heating. Bed:", target_bed, " Probe:", target_probe);
|
||||
const millis_t probe_timeout_ms = millis() + 900UL * 1000UL;
|
||||
@@ -260,8 +257,16 @@ void GcodeSuite::G76() {
|
||||
}
|
||||
if (timeout) break;
|
||||
|
||||
const float measured_z = g76_probe(TSI_PROBE, target_probe, noz_pos_xyz);
|
||||
if (isnan(measured_z) || target_probe > cali_info_init[TSI_PROBE].end_temp) break;
|
||||
const float measured_z = g76_probe(noz_pos);
|
||||
if (isnan(measured_z)) break;
|
||||
|
||||
if (target_probe == temp_comp.cali_info_init[TSI_PROBE].start_temp)
|
||||
temp_comp.prepare_new_calibration(measured_z);
|
||||
else
|
||||
temp_comp.push_back_new_measurement(TSI_PROBE, measured_z);
|
||||
|
||||
target_probe += temp_comp.cali_info_init[TSI_PROBE].temp_res;
|
||||
if (target_probe > temp_comp.cali_info_init[TSI_PROBE].end_temp) break;
|
||||
}
|
||||
|
||||
SERIAL_ECHOLNPAIR("Retrieved measurements: ", temp_comp.get_index());
|
||||
|
||||
@@ -28,12 +28,6 @@
|
||||
#include "../../feature/spindle_laser.h"
|
||||
#include "../../module/stepper.h"
|
||||
|
||||
inline cutter_power_t get_s_power() {
|
||||
return cutter_power_t(
|
||||
parser.intval('S', cutter.interpret_power(SPEED_POWER_STARTUP))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Laser:
|
||||
*
|
||||
@@ -77,52 +71,29 @@ inline cutter_power_t get_s_power() {
|
||||
*/
|
||||
void GcodeSuite::M3_M4(const bool is_M4) {
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
if (parser.seen('I') == DISABLED(LASER_POWER_INLINE_INVERT)) {
|
||||
// Laser power in inline mode
|
||||
cutter.inline_direction(is_M4); // Should always be unused
|
||||
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
if (parser.seen('O'))
|
||||
cutter.inline_ocr_power(parser.value_byte()); // The OCR is a value from 0 to 255 (uint8_t)
|
||||
else
|
||||
cutter.inline_power(get_s_power());
|
||||
#else
|
||||
cutter.inline_enabled(true);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
// Non-inline, standard case
|
||||
cutter.inline_disable(); // Prevent future blocks re-setting the power
|
||||
#if ENABLED(SPINDLE_FEATURE)
|
||||
planner.synchronize(); // Wait for movement to complete before changing power
|
||||
#endif
|
||||
|
||||
planner.synchronize(); // Wait for previous movement commands (G0/G0/G2/G3) to complete before changing power
|
||||
|
||||
cutter.set_direction(is_M4);
|
||||
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
if (parser.seenval('O'))
|
||||
cutter.set_ocr_power(parser.value_byte()); // The OCR is a value from 0 to 255 (uint8_t)
|
||||
else
|
||||
cutter.set_power(get_s_power());
|
||||
cutter.set_power(parser.intval('S', 255));
|
||||
#else
|
||||
cutter.set_enabled(true);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* M5 - Cutter OFF (when moves are complete)
|
||||
* M5 - Cutter OFF
|
||||
*/
|
||||
void GcodeSuite::M5() {
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
if (parser.seen('I') == DISABLED(LASER_POWER_INLINE_INVERT)) {
|
||||
cutter.inline_enabled(false); // Laser power in inline mode
|
||||
return;
|
||||
}
|
||||
// Non-inline, standard case
|
||||
cutter.inline_disable(); // Prevent future blocks re-setting the power
|
||||
#if ENABLED(SPINDLE_FEATURE)
|
||||
planner.synchronize();
|
||||
#endif
|
||||
planner.synchronize();
|
||||
cutter.set_enabled(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -53,10 +53,6 @@ GcodeSuite gcode;
|
||||
#include "../feature/cancel_object.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(LASER_MOVE_POWER)
|
||||
#include "../feature/spindle_laser.h"
|
||||
#endif
|
||||
|
||||
#include "../MarlinCore.h" // for idle()
|
||||
|
||||
millis_t GcodeSuite::previous_move_ms;
|
||||
@@ -176,18 +172,6 @@ void GcodeSuite::get_destination_from_command() {
|
||||
#if BOTH(MIXING_EXTRUDER, DIRECT_MIXING_IN_G1)
|
||||
M165();
|
||||
#endif
|
||||
|
||||
#if ENABLED(LASER_MOVE_POWER)
|
||||
// Set the laser power in the planner to configure this move
|
||||
if (parser.seen('S'))
|
||||
cutter.inline_power(parser.value_int());
|
||||
else {
|
||||
#if ENABLED(LASER_MOVE_G0_OFF)
|
||||
if (parser.codenum == 0) // G0
|
||||
cutter.inline_enabled(false);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -988,7 +972,7 @@ void GcodeSuite::process_subcommands_now(char * gcode) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
next_busy_signal_ms = ms + SEC_TO_MS(host_keepalive_interval);
|
||||
next_busy_signal_ms = ms + host_keepalive_interval * 1000UL;
|
||||
}
|
||||
|
||||
#endif // HOST_KEEPALIVE_FEATURE
|
||||
|
||||
@@ -69,7 +69,7 @@ void GcodeSuite::G0_G1(
|
||||
#endif
|
||||
#endif
|
||||
|
||||
get_destination_from_command(); // Get X Y Z E F (and set cutter power)
|
||||
get_destination_from_command(); // Process X Y Z E F parameters
|
||||
|
||||
#ifdef G0_FEEDRATE
|
||||
if (fast_move) {
|
||||
|
||||
@@ -283,7 +283,7 @@ void GcodeSuite::G2_G3(const bool clockwise) {
|
||||
relative_mode = true;
|
||||
#endif
|
||||
|
||||
get_destination_from_command(); // Get X Y Z E F (and set cutter power)
|
||||
get_destination_from_command();
|
||||
|
||||
#if ENABLED(SF_ARC_FIX)
|
||||
relative_mode = relative_mode_backup;
|
||||
|
||||
@@ -116,23 +116,7 @@
|
||||
#define Z_STEPPER_ALIGN_AMP 1.0
|
||||
#endif
|
||||
|
||||
//
|
||||
// Spindle/Laser power display types
|
||||
// Defined here so sanity checks can use them
|
||||
//
|
||||
#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
#define HAS_CUTTER 1
|
||||
#define _CUTTER_DISP_PWM 1
|
||||
#define _CUTTER_DISP_PERCENT 2
|
||||
#define _CUTTER_DISP_RPM 3
|
||||
#define _CUTTER_DISP(V) _CAT(_CUTTER_DISP_, V)
|
||||
#define CUTTER_DISPLAY_IS(V) (_CUTTER_DISP(CUTTER_POWER_DISPLAY) == _CUTTER_DISP(V))
|
||||
#endif
|
||||
|
||||
// Add features that need hardware PWM here
|
||||
#if ANY(FAST_PWM_FAN, SPINDLE_LASER_PWM)
|
||||
#define NEEDS_HARDWARE_PWM 1
|
||||
#endif
|
||||
#define HAS_CUTTER EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
|
||||
#if !defined(__AVR__) || !defined(USBCON)
|
||||
// Define constants and variables for buffering serial data.
|
||||
@@ -306,17 +290,3 @@
|
||||
#define MAXIMUM_STEPPER_RATE 250000
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// SD Card connection methods
|
||||
// Defined here so pins and sanity checks can use them
|
||||
//
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#define _SDCARD_LCD 1
|
||||
#define _SDCARD_ONBOARD 2
|
||||
#define _SDCARD_CUSTOM_CABLE 3
|
||||
#define _SDCARD_ID(V) _CAT(_SDCARD_, V)
|
||||
#define SD_CONNECTION_IS(V) (_SDCARD_ID(SDCARD_CONNECTION) == _SDCARD_ID(V))
|
||||
#else
|
||||
#define SD_CONNECTION_IS(...) 0
|
||||
#endif
|
||||
|
||||
@@ -324,36 +324,17 @@
|
||||
|
||||
/**
|
||||
* Override the SD_DETECT_STATE set in Configuration_adv.h
|
||||
* and enable sharing of onboard SD host drives (all platforms but AGCM4)
|
||||
*/
|
||||
#if ENABLED(SDSUPPORT)
|
||||
|
||||
#if SD_CONNECTION_IS(ONBOARD) && DISABLED(NO_SD_HOST_DRIVE) && !defined(ARDUINO_GRAND_CENTRAL_M4)
|
||||
//
|
||||
// The external SD card is not used. Hardware SPI is used to access the card.
|
||||
// When sharing the SD card with a PC we want the menu options to
|
||||
// mount/unmount the card and refresh it. So we disable card detect.
|
||||
//
|
||||
#undef SD_DETECT_PIN
|
||||
#define SHARED_SD_CARD
|
||||
#endif
|
||||
|
||||
#if DISABLED(SHARED_SD_CARD)
|
||||
#define INIT_SDCARD_ON_BOOT 1
|
||||
#endif
|
||||
|
||||
#if PIN_EXISTS(SD_DETECT)
|
||||
#if HAS_LCD_MENU && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION))
|
||||
#undef SD_DETECT_STATE
|
||||
#if ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
|
||||
#define SD_DETECT_STATE HIGH
|
||||
#endif
|
||||
#endif
|
||||
#ifndef SD_DETECT_STATE
|
||||
#define SD_DETECT_STATE LOW
|
||||
#if HAS_LCD_MENU && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION))
|
||||
#undef SD_DETECT_STATE
|
||||
#if ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
|
||||
#define SD_DETECT_STATE HIGH
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef SD_DETECT_STATE
|
||||
#define SD_DETECT_STATE LOW
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -2172,6 +2153,21 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#if SD_CONNECTION_IS(ONBOARD) && DISABLED(NO_SD_HOST_DRIVE) && !defined(ARDUINO_GRAND_CENTRAL_M4)
|
||||
//
|
||||
// The external SD card is not used. Hardware SPI is used to access the card.
|
||||
// When sharing the SD card with a PC we want the menu options to
|
||||
// mount/unmount the card and refresh it. So we disable card detect.
|
||||
//
|
||||
#undef SD_DETECT_PIN
|
||||
#define SHARED_SD_CARD
|
||||
#endif
|
||||
#if DISABLED(SHARED_SD_CARD)
|
||||
#define INIT_SDCARD_ON_BOOT 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !NUM_SERIAL
|
||||
#undef BAUD_RATE_GCODE
|
||||
#endif
|
||||
|
||||
@@ -491,21 +491,6 @@
|
||||
#error "DUGS_UI_MOVE_DIS_OPTION is spelled DGUS_UI_MOVE_DIS_OPTION. Please update Configuration_adv.h."
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Probe temp compensation requirements
|
||||
*/
|
||||
#if ENABLED(PROBE_TEMP_COMPENSATION)
|
||||
#if defined(PTC_PARK_POS_X) || defined(PTC_PARK_POS_Y) || defined(PTC_PARK_POS_Z)
|
||||
#error "PTC_PARK_POS_[XYZ] is now PTC_PARK_POS (array). Please update Configuration_adv.h."
|
||||
#elif !defined(PTC_PARK_POS)
|
||||
#error "PROBE_TEMP_COMPENSATION requires PTC_PARK_POS."
|
||||
#elif defined(PTC_PROBE_POS_X) || defined(PTC_PROBE_POS_Y)
|
||||
#error "PTC_PROBE_POS_[XY] is now PTC_PROBE_POS (array). Please update Configuration_adv.h."
|
||||
#elif !defined(PTC_PROBE_POS)
|
||||
#error "PROBE_TEMP_COMPENSATION requires PTC_PROBE_POS."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Marlin release, version and default string
|
||||
*/
|
||||
@@ -1466,7 +1451,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
* Deploying the Allen Key probe uses big moves in z direction. Too dangerous for an unhomed z-axis.
|
||||
*/
|
||||
#if ENABLED(Z_PROBE_ALLEN_KEY) && (Z_HOME_DIR < 0) && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
|
||||
#error "You can't home to a z min endstop with a Z_PROBE_ALLEN_KEY."
|
||||
#error "You can't home to a z min endstop with a Z_PROBE_ALLEN_KEY"
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -2669,9 +2654,9 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
#ifndef BACKLASH_DISTANCE_MM
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_DISTANCE_MM."
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_DISTANCE_MM"
|
||||
#elif !defined(BACKLASH_CORRECTION)
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_CORRECTION."
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_CORRECTION"
|
||||
#elif IS_CORE
|
||||
constexpr float backlash_arr[] = BACKLASH_DISTANCE_MM;
|
||||
static_assert(!backlash_arr[CORE_AXIS_1] && !backlash_arr[CORE_AXIS_2],
|
||||
@@ -2751,45 +2736,6 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#endif
|
||||
|
||||
#if HAS_CUTTER
|
||||
#ifndef CUTTER_POWER_DISPLAY
|
||||
#error "CUTTER_POWER_DISPLAY is required with a spindle or laser. Please update your Configuration_adv.h."
|
||||
#elif !CUTTER_DISPLAY_IS(PWM) && !CUTTER_DISPLAY_IS(PERCENT) && !CUTTER_DISPLAY_IS(RPM)
|
||||
#error "CUTTER_POWER_DISPLAY must be PWM, PERCENT, or RPM. Please update your Configuration_adv.h."
|
||||
#endif
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
#if ENABLED(SPINDLE_CHANGE_DIR)
|
||||
#error "SPINDLE_CHANGE_DIR and LASER_POWER_INLINE are incompatible."
|
||||
#elif ENABLED(LASER_MOVE_G0_OFF) && DISABLED(LASER_MOVE_POWER)
|
||||
#error "LASER_MOVE_G0_OFF requires LASER_MOVE_POWER. Please update your Configuration_adv.h."
|
||||
#endif
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
#if DISABLED(SPINDLE_LASER_PWM)
|
||||
#error "LASER_POWER_INLINE_TRAPEZOID requires SPINDLE_LASER_PWM to function."
|
||||
#elif ENABLED(S_CURVE_ACCELERATION)
|
||||
//#ifndef LASER_POWER_INLINE_S_CURVE_ACCELERATION_WARN
|
||||
// #define LASER_POWER_INLINE_S_CURVE_ACCELERATION_WARN
|
||||
// #warning "Combining LASER_POWER_INLINE_TRAPEZOID with S_CURVE_ACCELERATION may result in unintended behavior."
|
||||
//#endif
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(LASER_POWER_INLINE_INVERT)
|
||||
//#ifndef LASER_POWER_INLINE_INVERT_WARN
|
||||
// #define LASER_POWER_INLINE_INVERT_WARN
|
||||
// #warning "Enabling LASER_POWER_INLINE_INVERT means that `M5` won't kill the laser immediately; use `M5 I` instead."
|
||||
//#endif
|
||||
#endif
|
||||
#else
|
||||
#if SPINDLE_LASER_POWERUP_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERUP_DELAY must be greater than 0."
|
||||
#elif SPINDLE_LASER_POWERDOWN_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERDOWN_DELAY must be greater than 0."
|
||||
#elif ENABLED(LASER_MOVE_POWER)
|
||||
#error "LASER_MOVE_POWER requires LASER_POWER_INLINE."
|
||||
#elif ANY(LASER_POWER_INLINE_TRAPEZOID, LASER_POWER_INLINE_INVERT, LASER_MOVE_G0_OFF, LASER_MOVE_POWER)
|
||||
#error "Enabled an inline laser feature without inline laser power being enabled."
|
||||
#endif
|
||||
#endif
|
||||
#define _PIN_CONFLICT(P) (PIN_EXISTS(P) && P##_PIN == SPINDLE_LASER_PWM_PIN)
|
||||
#if BOTH(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
#error "Enable only one of SPINDLE_FEATURE or LASER_FEATURE."
|
||||
@@ -2802,9 +2748,13 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#error "SPINDLE_LASER_PWM_PIN is required for SPINDLE_LASER_PWM."
|
||||
#elif !PWM_PIN(SPINDLE_LASER_PWM_PIN)
|
||||
#error "SPINDLE_LASER_PWM_PIN not assigned to a PWM pin."
|
||||
#elif SPINDLE_LASER_POWERUP_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERUP_DELAY must be greater than 0."
|
||||
#elif SPINDLE_LASER_POWERDOWN_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERDOWN_DELAY must be greater than 0."
|
||||
#elif !defined(SPINDLE_LASER_PWM_INVERT)
|
||||
#error "SPINDLE_LASER_PWM_INVERT is required for (SPINDLE|LASER)_FEATURE."
|
||||
#elif !defined(SPEED_POWER_SLOPE) || !defined(SPEED_POWER_INTERCEPT) || !defined(SPEED_POWER_MIN) || !defined(SPEED_POWER_MAX) || !defined(SPEED_POWER_STARTUP)
|
||||
#elif !defined(SPEED_POWER_SLOPE) || !defined(SPEED_POWER_INTERCEPT) || !defined(SPEED_POWER_MIN) || !defined(SPEED_POWER_MAX)
|
||||
#error "SPINDLE_LASER_PWM equation constant(s) missing."
|
||||
#elif _PIN_CONFLICT(X_MIN)
|
||||
#error "SPINDLE_LASER_PWM pin conflicts with X_MIN_PIN."
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
* version was tagged.
|
||||
*/
|
||||
#ifndef STRING_DISTRIBUTION_DATE
|
||||
#define STRING_DISTRIBUTION_DATE "2020-04-07"
|
||||
#define STRING_DISTRIBUTION_DATE "2020-04-02"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
||||
@@ -570,12 +570,8 @@ void MarlinUI::draw_status_screen() {
|
||||
// Laser / Spindle
|
||||
#if DO_DRAW_CUTTER
|
||||
if (cutter.power && PAGE_CONTAINS(STATUS_CUTTER_TEXT_Y - INFO_FONT_ASCENT, STATUS_CUTTER_TEXT_Y - 1)) {
|
||||
lcd_put_u8str(STATUS_CUTTER_TEXT_X, STATUS_CUTTER_TEXT_Y, i16tostr3rj(cutter.power));
|
||||
#if CUTTER_DISPLAY_IS(PERCENT)
|
||||
lcd_put_wchar('%');
|
||||
#elif CUTTER_DISPLAY_IS(RPM)
|
||||
lcd_put_wchar('K');
|
||||
#endif
|
||||
lcd_put_u8str(STATUS_CUTTER_TEXT_X, STATUS_CUTTER_TEXT_Y, i16tostr3rj(cutter.powerPercent(cutter.power)));
|
||||
lcd_put_wchar('%');
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,194 @@
|
||||
#pragma once
|
||||
|
||||
#include "string.h"
|
||||
#include <Arduino.h>
|
||||
#include "../ui_api.h"
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
namespace ExtUI {
|
||||
/*********************************/
|
||||
#define FHONE (0x5A)
|
||||
#define FHTWO (0xA5)
|
||||
#define TEXTBYTELEN 18
|
||||
#define MaxFileNumber 20// 16
|
||||
|
||||
#define CEIconGrap 12
|
||||
#define FileNum MaxFileNumber
|
||||
#define FileNameLen TEXTBYTELEN
|
||||
|
||||
#define SizeofDatabuf 26
|
||||
|
||||
/*************Register and Variable addr*****************/
|
||||
#define RegAddr_W 0x80
|
||||
#define RegAddr_R 0x81
|
||||
#define VarAddr_W 0x82
|
||||
#define VarAddr_R 0x83
|
||||
#define ExchangePageBase (unsigned long)0x5A010000 //the first page ID. other page = first page ID + relevant num;
|
||||
#define StartSoundSet ((unsigned long)0x060480A0) // 06,start-music; 04, 4 musics; 80, the volume value; 04, return value about music number.
|
||||
#define FONT_EEPROM 90
|
||||
#define AutoLeve_EEPROM 100
|
||||
#define FanOn 255
|
||||
#define FanOff 0
|
||||
|
||||
/*variable addr*/
|
||||
#define ExchangepageAddr 0x0084
|
||||
#define SoundAddr 0x00A0
|
||||
#define StartIcon 0x1000
|
||||
#define FeedrateDisplay 0x1006 // Speed
|
||||
#define Stopprint 0x1008
|
||||
#define Pauseprint 0x100A
|
||||
#define Resumeprint 0x100C
|
||||
#define PrintscheduleIcon 0x100E
|
||||
#define Timehour 0x1010
|
||||
#define Timemin 0x1012
|
||||
#define IconPrintstatus 0x1014
|
||||
#define Percentage 0x1016
|
||||
#define FanKeyIcon 0x101E
|
||||
#define Flowrate 0x1300
|
||||
|
||||
#define StepMM_X 0x1242
|
||||
#define StepMM_Y 0x1246
|
||||
#define StepMM_Z 0x124A
|
||||
#define StepMM_E 0x124E
|
||||
|
||||
#define ProbeOffset_X 0x1236
|
||||
#define ProbeOffset_Y 0x123A
|
||||
#define ProbeOffset_Z 0x123E
|
||||
|
||||
#define HotendPID_AutoTmp 0x1252
|
||||
#define BedPID_AutoTmp 0x1254
|
||||
|
||||
#define HotendPID_P 0x1256
|
||||
#define HotendPID_I 0x125A
|
||||
#define HotendPID_D 0x125E
|
||||
|
||||
#define BedPID_P 0x1262
|
||||
#define BedPID_I 0x1266
|
||||
#define BedPID_D 0x126A
|
||||
|
||||
#define HeatPercentIcon 0x1024
|
||||
|
||||
#define NzBdSet 0x1032
|
||||
#define NozzlePreheat 0x1034
|
||||
#define NozzleTemp 0x1036
|
||||
#define BedPreheat 0x103A
|
||||
#define Bedtemp 0x103C
|
||||
|
||||
#define AutoZeroIcon 0x1042
|
||||
#define AutoLevelIcon 0x1045
|
||||
#define AutoZero 0x1046
|
||||
#define DisplayXaxis 0x1048
|
||||
#define DisplayYaxis 0x104A
|
||||
#define DisplayZaxis 0x104C
|
||||
|
||||
#define FilementUnit1 0x1054
|
||||
#define Exchfilement 0x1056
|
||||
#define FilementUnit2 0x1058
|
||||
|
||||
#define MacVersion 0x1060
|
||||
#define SoftVersion 0x106A
|
||||
#define PrinterSize 0x1074
|
||||
#define CorpWebsite 0x107E
|
||||
#define VolumeIcon 0x108A
|
||||
#define SoundIcon 0x108C
|
||||
#define AutolevelIcon 0x108D
|
||||
#define ExchFlmntIcon 0x108E
|
||||
#define AutolevelVal 0x1100
|
||||
|
||||
#define FilenameIcon 0x1200
|
||||
#define FilenameIcon1 0x1220
|
||||
#define Printfilename 0x2000
|
||||
#define SDFILE_ADDR 0x200A
|
||||
#define FilenamePlay 0x20D2
|
||||
#define FilenameChs 0x20D3
|
||||
#define Choosefilename 0x20D4
|
||||
#define FilenameCount 0x20DE
|
||||
#define FilenameNature 0x6003
|
||||
|
||||
#if ANY(MachineCR10SPro, MachineEnder5Plus, MachineCR10Max) || ENABLED(Force10SProDisplay)
|
||||
#define StatusMessageString 0x3000
|
||||
#else
|
||||
#define StatusMessageString 0x20E8
|
||||
#endif
|
||||
|
||||
#if defined(MCU_LPC1769) || defined(MCU_LPC1768)
|
||||
#define DWIN_SERIAL DGUS_SERIAL
|
||||
#elif defined(TARGET_STM32F4)
|
||||
#define DWIN_SERIAL Serial1
|
||||
#else
|
||||
#define DWIN_SERIAL Serial2
|
||||
#endif
|
||||
|
||||
/************struct**************/
|
||||
|
||||
typedef struct DataBuf
|
||||
{
|
||||
unsigned char len;
|
||||
unsigned char head[2];
|
||||
unsigned char command;
|
||||
unsigned long addr;
|
||||
unsigned long bytelen;
|
||||
unsigned short data[32];
|
||||
unsigned char reserv[4];
|
||||
} DB;
|
||||
|
||||
typedef struct CardRecord
|
||||
{
|
||||
char recordcount;
|
||||
int Filesum;
|
||||
unsigned long addr[FileNum];
|
||||
char Cardshowfilename[FileNum][FileNameLen];
|
||||
char Cardfilename[FileNum][FileNameLen];
|
||||
}CRec;
|
||||
|
||||
class RTSSHOW {
|
||||
public:
|
||||
RTSSHOW();
|
||||
int RTS_RecData();
|
||||
void RTS_SDCardInit(void);
|
||||
void RTS_SDCardUpate(bool, bool);
|
||||
int RTS_CheckFilement(int);
|
||||
void RTS_SndData(void);
|
||||
void RTS_SndData(const String &, unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(const char[], unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(char, unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(unsigned char*, unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(int, unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(float, unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(unsigned int,unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(long,unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SndData(unsigned long,unsigned long, unsigned char = VarAddr_W);
|
||||
void RTS_SDcard_Stop();
|
||||
void RTS_HandleData();
|
||||
void RTS_Init();
|
||||
|
||||
DB recdat;
|
||||
DB snddat;
|
||||
unsigned char databuf[SizeofDatabuf];
|
||||
};
|
||||
|
||||
static RTSSHOW rtscheck;
|
||||
|
||||
#define Addvalue 3
|
||||
#define PrintChoice_Value (0+Addvalue)
|
||||
#define Zoffset_Value (3+Addvalue)
|
||||
#define Setting_Value (8+Addvalue)
|
||||
#define XYZEaxis_Value (12+Addvalue)
|
||||
#define Filement_Value (15+Addvalue)
|
||||
#define Language_Value (18+Addvalue)
|
||||
#define Filename_Value (22+Addvalue)
|
||||
|
||||
enum PROC_COM {Printfile=0,Ajust,Feedrate,PrintChoice=PrintChoice_Value,Zoffset=Zoffset_Value,TempControl,ManualSetTemp,Setting=Setting_Value,
|
||||
ReturnBack,Bedlevel,Autohome,XYZEaxis=XYZEaxis_Value,Filement=Filement_Value,LanguageChoice=Language_Value,No_Filement,PwrOffNoF,Volume,Filename=Filename_Value};
|
||||
|
||||
const unsigned long Addrbuf[] = {0x1002, 0x1004, 0x1006, 0x1008, 0x100A, 0x100C, 0x1026, 0x1030, 0x1032, 0x1034, 0x103A,
|
||||
0x103E, 0x1040, 0x1044, 0x1046, 0x1048, 0x104A, 0x104C, 0x1054, 0x1056, 0x1058,
|
||||
0x105C, 0x105E, 0x105F, 0x1088, 0};
|
||||
|
||||
void RTSUpdate();
|
||||
void RTSInit();
|
||||
|
||||
}
|
||||
#ifndef USER_GCODE_1
|
||||
#define USER_GCODE_1 "G28"
|
||||
#endif
|
||||
#endif
|
||||
@@ -127,12 +127,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
#if HAS_LEVELING && HAS_MESH
|
||||
void onMeshUpdate(const int8_t x, const int8_t y, const float val) {
|
||||
BedMeshScreen::onMeshUpdate(x, y, val);
|
||||
}
|
||||
|
||||
void onMeshUpdate(const int8_t x, const int8_t y, const ExtUI::probe_state_t state) {
|
||||
BedMeshScreen::onMeshUpdate(x, y, state);
|
||||
void onMeshUpdate(const int8_t, const int8_t, const float) {
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,268 +0,0 @@
|
||||
/***********************
|
||||
* bed_mesh_screen.cpp *
|
||||
***********************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2020 *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#include "../config.h"
|
||||
|
||||
#if ENABLED(TOUCH_UI_FTDI_EVE) && HAS_MESH
|
||||
|
||||
#include "screens.h"
|
||||
#include "screen_data.h"
|
||||
|
||||
using namespace FTDI;
|
||||
using namespace Theme;
|
||||
using namespace ExtUI;
|
||||
|
||||
#ifdef TOUCH_UI_PORTRAIT
|
||||
#define GRID_COLS 2
|
||||
#define GRID_ROWS 10
|
||||
|
||||
#define MESH_POS BTN_POS(1, 2), BTN_SIZE(2,5)
|
||||
#define Z_LABEL_POS BTN_POS(1, 8), BTN_SIZE(1,1)
|
||||
#define Z_VALUE_POS BTN_POS(2, 8), BTN_SIZE(1,1)
|
||||
#define WAIT_POS BTN_POS(1, 8), BTN_SIZE(2,1)
|
||||
#define BACK_POS BTN_POS(1,10), BTN_SIZE(2,1)
|
||||
#else
|
||||
#define GRID_COLS 5
|
||||
#define GRID_ROWS 5
|
||||
|
||||
#define MESH_POS BTN_POS(2,1), BTN_SIZE(4,5)
|
||||
#define Z_LABEL_POS BTN_POS(1,3), BTN_SIZE(1,1)
|
||||
#define Z_VALUE_POS BTN_POS(1,4), BTN_SIZE(2,1)
|
||||
#define WAIT_POS BTN_POS(1,3), BTN_SIZE(2,2)
|
||||
#define BACK_POS BTN_POS(1,5), BTN_SIZE(2,1)
|
||||
#endif
|
||||
|
||||
void BedMeshScreen::drawMesh(int16_t x, int16_t y, int16_t w, int16_t h, ExtUI::bed_mesh_t data, uint8_t opts) {
|
||||
CommandProcessor cmd;
|
||||
|
||||
#define TRANSFORM_2(X,Y,Z) (X), (Y) // No transform
|
||||
#define TRANSFORM_1(X,Y,Z) TRANSFORM_2((X) + (Y) * slant, (Y) - (Z), 0) // Perspective
|
||||
#define TRANSFORM(X,Y,Z) TRANSFORM_1(float(X)/(cols-1) - 0.5, float(Y)/(rows-1) - 0.5, (Z)) // Normalize
|
||||
|
||||
constexpr uint8_t rows = GRID_MAX_POINTS_Y;
|
||||
constexpr uint8_t cols = GRID_MAX_POINTS_X;
|
||||
const float slant = 0.5;
|
||||
const float bounds_min[] = {TRANSFORM(0 ,0 ,0)};
|
||||
const float bounds_max[] = {TRANSFORM(cols,rows,0)};
|
||||
const float scale_x = float(w)/(bounds_max[0] - bounds_min[0]);
|
||||
const float scale_y = float(h)/(bounds_max[1] - bounds_min[1]);
|
||||
const float center_x = x + w/2;
|
||||
const float center_y = y + h/2;
|
||||
|
||||
float val_mean = 0;
|
||||
float val_max = -INFINITY;
|
||||
float val_min = INFINITY;
|
||||
uint8_t val_cnt = 0;
|
||||
|
||||
if (opts & USE_AUTOSCALE) {
|
||||
// Compute the mean
|
||||
for (uint8_t y = 0; y < rows; y++) {
|
||||
for (uint8_t x = 0; x < cols; x++) {
|
||||
const float val = data[x][y];
|
||||
if (!isnan(val)) {
|
||||
val_mean += val;
|
||||
val_max = max(val_max, val);
|
||||
val_min = min(val_min, val);
|
||||
val_cnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (val_cnt) {
|
||||
val_mean /= val_cnt;
|
||||
val_min -= val_mean;
|
||||
val_max -= val_mean;
|
||||
} else {
|
||||
val_mean = 0;
|
||||
val_min = 0;
|
||||
val_max = 0;
|
||||
}
|
||||
}
|
||||
|
||||
const float scale_z = ((val_max == val_min) ? 1 : 1/(val_max - val_min)) * 0.1;
|
||||
|
||||
#undef TRANSFORM_2
|
||||
#define TRANSFORM_2(X,Y,Z) center_x + (X) * scale_x, center_y + (Y) * scale_y // Scale and position
|
||||
#define VALUE(X,Y) ((data && ISVAL(X,Y)) ? data[X][Y] : 0)
|
||||
#define ISVAL(X,Y) (data ? !isnan(data[X][Y]) : true)
|
||||
#define HEIGHT(X,Y) (VALUE(X,Y) * scale_z)
|
||||
|
||||
uint16_t basePointSize = min(scale_x,scale_y) / max(cols,rows);
|
||||
|
||||
cmd.cmd(SAVE_CONTEXT())
|
||||
.cmd(VERTEX_FORMAT(0))
|
||||
.cmd(TAG_MASK(false))
|
||||
.cmd(SAVE_CONTEXT());
|
||||
|
||||
for (uint8_t y = 0; y < rows; y++) {
|
||||
for (uint8_t x = 0; x < cols; x++) {
|
||||
if (ISVAL(x,y)) {
|
||||
const bool hasLeftSegment = x < cols - 1 && ISVAL(x+1,y);
|
||||
const bool hasRightSegment = y < rows - 1 && ISVAL(x,y+1);
|
||||
if (hasLeftSegment || hasRightSegment) {
|
||||
cmd.cmd(BEGIN(LINE_STRIP));
|
||||
if (hasLeftSegment) cmd.cmd(VERTEX2F(TRANSFORM(x + 1, y , HEIGHT(x + 1, y ))));
|
||||
cmd.cmd( VERTEX2F(TRANSFORM(x , y , HEIGHT(x , y ))));
|
||||
if (hasRightSegment) cmd.cmd(VERTEX2F(TRANSFORM(x , y + 1, HEIGHT(x , y + 1))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (opts & USE_POINTS) {
|
||||
cmd.cmd(POINT_SIZE(basePointSize * 2));
|
||||
cmd.cmd(BEGIN(POINTS));
|
||||
for (uint8_t x = 0; x < cols; x++) {
|
||||
if (ISVAL(x,y)) {
|
||||
if (opts & USE_COLORS) {
|
||||
const float val_dev = VALUE(x, y) - val_mean;
|
||||
const uint8_t neg_byte = sq(val_dev) / sq(val_dev < 0 ? val_min : val_max) * 0xFF;
|
||||
const uint8_t pos_byte = 255 - neg_byte;
|
||||
cmd.cmd(COLOR_RGB(pos_byte, pos_byte, 0xFF));
|
||||
}
|
||||
cmd.cmd(VERTEX2F(TRANSFORM(x, y, HEIGHT(x, y))));
|
||||
}
|
||||
}
|
||||
if (opts & USE_COLORS) {
|
||||
cmd.cmd(RESTORE_CONTEXT())
|
||||
.cmd(SAVE_CONTEXT());
|
||||
}
|
||||
}
|
||||
}
|
||||
cmd.cmd(RESTORE_CONTEXT())
|
||||
.cmd(TAG_MASK(true));
|
||||
|
||||
if (opts & USE_TAGS) {
|
||||
cmd.cmd(COLOR_MASK(false, false, false, false))
|
||||
.cmd(POINT_SIZE(basePointSize * 10))
|
||||
.cmd(BEGIN(POINTS));
|
||||
for (uint8_t y = 0; y < rows; y++) {
|
||||
for (uint8_t x = 0; x < cols; x++) {
|
||||
const uint8_t tag = pointToTag(x, y);
|
||||
cmd.tag(tag).cmd(VERTEX2F(TRANSFORM(x, y, HEIGHT(x, y))));
|
||||
}
|
||||
}
|
||||
cmd.cmd(COLOR_MASK(true, true, true, true));
|
||||
}
|
||||
|
||||
if (opts & USE_HIGHLIGHT) {
|
||||
const uint8_t tag = screen_data.BedMeshScreen.highlightedTag;
|
||||
uint8_t x, y;
|
||||
tagToPoint(tag, x, y);
|
||||
cmd.cmd(COLOR_A(128))
|
||||
.cmd(POINT_SIZE(basePointSize * 6))
|
||||
.cmd(BEGIN(POINTS))
|
||||
.tag(tag).cmd(VERTEX2F(TRANSFORM(x, y, HEIGHT(x, y))));
|
||||
}
|
||||
cmd.cmd(END());
|
||||
cmd.cmd(RESTORE_CONTEXT());
|
||||
}
|
||||
|
||||
uint8_t BedMeshScreen::pointToTag(uint8_t x, uint8_t y) {
|
||||
return y * (GRID_MAX_POINTS_X) + x + 10;
|
||||
}
|
||||
|
||||
void BedMeshScreen::tagToPoint(uint8_t tag, uint8_t &x, uint8_t &y) {
|
||||
x = (tag - 10) % (GRID_MAX_POINTS_X);
|
||||
y = (tag - 10) / (GRID_MAX_POINTS_X);
|
||||
}
|
||||
|
||||
void BedMeshScreen::onEntry() {
|
||||
screen_data.BedMeshScreen.highlightedTag = 0;
|
||||
screen_data.BedMeshScreen.count = 0;
|
||||
BaseScreen::onEntry();
|
||||
}
|
||||
|
||||
float BedMeshScreen::getHightlightedValue() {
|
||||
if (screen_data.BedMeshScreen.highlightedTag) {
|
||||
xy_uint8_t pt;
|
||||
tagToPoint(screen_data.BedMeshScreen.highlightedTag, pt.x, pt.y);
|
||||
return ExtUI::getMeshPoint(pt);
|
||||
}
|
||||
return NAN;
|
||||
}
|
||||
|
||||
void BedMeshScreen::drawHighlightedPointValue() {
|
||||
char str[16];
|
||||
const float val = getHightlightedValue();
|
||||
const bool isGood = !isnan(val);
|
||||
if (isGood)
|
||||
dtostrf(val, 5, 3, str);
|
||||
else
|
||||
strcpy_P(str, PSTR("-"));
|
||||
|
||||
CommandProcessor cmd;
|
||||
cmd.font(Theme::font_medium)
|
||||
.text(Z_LABEL_POS, GET_TEXT_F(MSG_MESH_EDIT_Z))
|
||||
.text(Z_VALUE_POS, str)
|
||||
.colors(action_btn)
|
||||
.tag(1).button( BACK_POS, GET_TEXT_F(MSG_BACK))
|
||||
.tag(0);
|
||||
}
|
||||
|
||||
void BedMeshScreen::onRedraw(draw_mode_t what) {
|
||||
if (what & BACKGROUND) {
|
||||
CommandProcessor cmd;
|
||||
cmd.cmd(CLEAR_COLOR_RGB(bg_color))
|
||||
.cmd(CLEAR(true,true,true));
|
||||
|
||||
// Draw the shadow and tags
|
||||
cmd.cmd(COLOR_RGB(0x444444));
|
||||
BedMeshScreen::drawMesh(MESH_POS, nullptr, USE_POINTS | USE_TAGS);
|
||||
cmd.cmd(COLOR_RGB(bg_text_enabled));
|
||||
}
|
||||
|
||||
if (what & FOREGROUND) {
|
||||
const bool levelingFinished = screen_data.BedMeshScreen.count >= GRID_MAX_POINTS;
|
||||
if (levelingFinished) drawHighlightedPointValue();
|
||||
|
||||
BedMeshScreen::drawMesh(MESH_POS, ExtUI::getMeshArray(),
|
||||
USE_POINTS | USE_HIGHLIGHT | USE_AUTOSCALE | (levelingFinished ? USE_COLORS : 0));
|
||||
}
|
||||
}
|
||||
|
||||
bool BedMeshScreen::onTouchStart(uint8_t tag) {
|
||||
screen_data.BedMeshScreen.highlightedTag = tag;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BedMeshScreen::onTouchEnd(uint8_t tag) {
|
||||
switch(tag) {
|
||||
case 1:
|
||||
GOTO_PREVIOUS();
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void BedMeshScreen::onMeshUpdate(const int8_t, const int8_t, const float) {
|
||||
if (AT_SCREEN(BedMeshScreen))
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
void BedMeshScreen::onMeshUpdate(const int8_t x, const int8_t y, const ExtUI::probe_state_t state) {
|
||||
if (state == ExtUI::PROBE_FINISH) {
|
||||
screen_data.BedMeshScreen.highlightedTag = pointToTag(x, y);
|
||||
screen_data.BedMeshScreen.count++;
|
||||
}
|
||||
BedMeshScreen::onMeshUpdate(x, y, 0);
|
||||
}
|
||||
|
||||
#endif // TOUCH_UI_FTDI_EVE
|
||||
@@ -146,18 +146,14 @@ bool MainMenu::onTouchEnd(uint8_t tag) {
|
||||
#ifdef AXIS_LEVELING_COMMANDS
|
||||
case 9: SpinnerDialogBox::enqueueAndWait_P(F(AXIS_LEVELING_COMMANDS)); break;
|
||||
#endif
|
||||
#if HAS_LEVELING
|
||||
case 10:
|
||||
#ifndef BED_LEVELING_COMMANDS
|
||||
#define BED_LEVELING_COMMANDS "G29"
|
||||
#endif
|
||||
#if HAS_MESH
|
||||
GOTO_SCREEN(BedMeshScreen);
|
||||
injectCommands_P(PSTR(BED_LEVELING_COMMANDS));
|
||||
#else
|
||||
SpinnerDialogBox::enqueueAndWait_P(F(BED_LEVELING_COMMANDS));
|
||||
#endif
|
||||
break;
|
||||
#ifdef HAS_LEVELING
|
||||
case 10: SpinnerDialogBox::enqueueAndWait_P(F(
|
||||
#ifdef BED_LEVELING_COMMANDS
|
||||
BED_LEVELING_COMMANDS
|
||||
#else
|
||||
"G29"
|
||||
#endif
|
||||
)); break;
|
||||
#endif
|
||||
case 11: GOTO_SCREEN(AboutScreen); break;
|
||||
default:
|
||||
|
||||
@@ -60,12 +60,6 @@ union screen_data_t {
|
||||
struct base_numeric_adjustment_t placeholder;
|
||||
float e_rel[ExtUI::extruderCount];
|
||||
} MoveAxisScreen;
|
||||
#if HAS_MESH
|
||||
struct {
|
||||
uint8_t count;
|
||||
uint8_t highlightedTag;
|
||||
} BedMeshScreen;
|
||||
#endif
|
||||
#if ENABLED(TOUCH_UI_DEVELOPER_MENU)
|
||||
struct {
|
||||
uint32_t next_watchdog_trigger;
|
||||
|
||||
@@ -55,9 +55,6 @@ SCREEN_TABLE {
|
||||
#endif
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
DECL_SCREEN(NudgeNozzleScreen),
|
||||
#endif
|
||||
#if HAS_MESH
|
||||
DECL_SCREEN(BedMeshScreen),
|
||||
#endif
|
||||
DECL_SCREEN(MoveAxisScreen),
|
||||
DECL_SCREEN(StepsScreen),
|
||||
|
||||
@@ -55,9 +55,6 @@ enum {
|
||||
MAX_VELOCITY_SCREEN_CACHE,
|
||||
MAX_ACCELERATION_SCREEN_CACHE,
|
||||
DEFAULT_ACCELERATION_SCREEN_CACHE,
|
||||
#if HAS_MESH
|
||||
BED_MESH_SCREEN_CACHE,
|
||||
#endif
|
||||
#if DISABLED(CLASSIC_JERK)
|
||||
JUNC_DEV_SCREEN_CACHE,
|
||||
#else
|
||||
@@ -133,33 +130,6 @@ class AboutScreen : public BaseScreen, public UncachedScreen {
|
||||
static bool onTouchEnd(uint8_t tag);
|
||||
};
|
||||
|
||||
#if HAS_MESH
|
||||
class BedMeshScreen : public BaseScreen, public CachedScreen<BED_MESH_SCREEN_CACHE> {
|
||||
private:
|
||||
enum MeshOpts {
|
||||
USE_POINTS = 0x01,
|
||||
USE_COLORS = 0x02,
|
||||
USE_TAGS = 0x04,
|
||||
USE_HIGHLIGHT = 0x08,
|
||||
USE_AUTOSCALE = 0x10
|
||||
};
|
||||
|
||||
static uint8_t pointToTag(uint8_t x, uint8_t y);
|
||||
static void tagToPoint(uint8_t tag, uint8_t &x, uint8_t &y);
|
||||
static float getHightlightedValue();
|
||||
static void drawHighlightedPointValue();
|
||||
static void drawMesh(int16_t x, int16_t y, int16_t w, int16_t h, ExtUI::bed_mesh_t data, uint8_t opts);
|
||||
|
||||
public:
|
||||
static void onMeshUpdate(const int8_t x, const int8_t y, const float val);
|
||||
static void onMeshUpdate(const int8_t x, const int8_t y, const ExtUI::probe_state_t);
|
||||
static void onEntry();
|
||||
static void onRedraw(draw_mode_t);
|
||||
static bool onTouchStart(uint8_t tag);
|
||||
static bool onTouchEnd(uint8_t tag);
|
||||
};
|
||||
#endif
|
||||
|
||||
#if ENABLED(PRINTCOUNTER)
|
||||
class StatisticsScreen : public BaseScreen, public UncachedScreen {
|
||||
public:
|
||||
|
||||
@@ -112,9 +112,6 @@ namespace ExtUI {
|
||||
#if ENABLED(JOYSTICK)
|
||||
uint8_t jogging : 1;
|
||||
#endif
|
||||
#if ENABLED(SDSUPPORT)
|
||||
uint8_t was_sd_printing : 1;
|
||||
#endif
|
||||
} flags;
|
||||
|
||||
#ifdef __SAM3X8E__
|
||||
@@ -1035,18 +1032,11 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
bool isPrintingFromMedia() {
|
||||
#if ENABLED(SDSUPPORT)
|
||||
// Account for when IS_SD_PRINTING() reports the end of the
|
||||
// print when there is still SD card data in the planner.
|
||||
flags.was_sd_printing = card.isFileOpen() || (flags.was_sd_printing && commandsInQueue());
|
||||
return flags.was_sd_printing;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
return IFSD(card.isFileOpen(), false);
|
||||
}
|
||||
|
||||
bool isPrinting() {
|
||||
return (commandsInQueue() || isPrintingFromMedia() || IFSD(IS_SD_PRINTING(), false));
|
||||
return (planner.movesplanned() || isPrintingFromMedia() || IFSD(IS_SD_PRINTING(), false));
|
||||
}
|
||||
|
||||
bool isMediaInserted() {
|
||||
@@ -1149,7 +1139,28 @@ void MarlinUI::init() {
|
||||
ExtUI::onStartup();
|
||||
}
|
||||
|
||||
void MarlinUI::update() { ExtUI::onIdle(); }
|
||||
void MarlinUI::update() {
|
||||
#if ENABLED(SDSUPPORT)
|
||||
static bool last_sd_status;
|
||||
const bool sd_status = IS_SD_INSERTED();
|
||||
if (sd_status != last_sd_status) {
|
||||
last_sd_status = sd_status;
|
||||
if (sd_status) {
|
||||
card.mount();
|
||||
if (card.isMounted())
|
||||
ExtUI::onMediaInserted();
|
||||
else
|
||||
ExtUI::onMediaError();
|
||||
}
|
||||
else {
|
||||
const bool ok = card.isMounted();
|
||||
card.release();
|
||||
if (ok) ExtUI::onMediaRemoved();
|
||||
}
|
||||
}
|
||||
#endif // SDSUPPORT
|
||||
ExtUI::onIdle();
|
||||
}
|
||||
|
||||
void MarlinUI::kill_screen(PGM_P const error, PGM_P const component) {
|
||||
using namespace ExtUI;
|
||||
|
||||
@@ -141,10 +141,6 @@ namespace ExtUI {
|
||||
void setMeshPoint(const xy_uint8_t &pos, const float zval);
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const float zval);
|
||||
inline void onMeshUpdate(const xy_int8_t &pos, const float zval) { onMeshUpdate(pos.x, pos.y, zval); }
|
||||
|
||||
typedef enum : unsigned char { PROBE_START, PROBE_FINISH } probe_state_t;
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, probe_state_t state);
|
||||
inline void onMeshUpdate(const xy_int8_t &pos, probe_state_t state) { onMeshUpdate(pos.x, pos.y, state); }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -122,10 +122,6 @@ namespace ExtUI {
|
||||
// Called when any mesh points are updated
|
||||
}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const ExtUI::probe_state_t state) {
|
||||
// Called to indicate a special condition
|
||||
}
|
||||
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
void onPowerLossResume() {
|
||||
// Called on resume from power-loss
|
||||
|
||||
@@ -93,10 +93,6 @@ namespace ExtUI {
|
||||
// Called when any mesh points are updated
|
||||
}
|
||||
|
||||
void onMeshUpdate(const int8_t xpos, const int8_t ypos, const ExtUI::probe_state_t state) {
|
||||
// Called to indicate a special condition
|
||||
}
|
||||
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
void onPowerLossResume() {
|
||||
// Called on resume from power-loss
|
||||
|
||||
@@ -90,7 +90,6 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Conf");
|
||||
PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Preheat Custom");
|
||||
PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Cooldown");
|
||||
PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frequency");
|
||||
PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Laser Control");
|
||||
PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Laser Off");
|
||||
PROGMEM Language_Str MSG_LASER_ON = _UxGT("Laser On");
|
||||
@@ -241,8 +240,6 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozzle ~");
|
||||
PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Bed");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Enclosure");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Speed");
|
||||
@@ -374,6 +371,7 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Prime Speed");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Retract Speed");
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Change Filament");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Change Filament *");
|
||||
PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Load Filament");
|
||||
@@ -557,6 +555,10 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
|
||||
PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
|
||||
|
||||
#define MSG_1_LINE(A) A "\0" "\0"
|
||||
#define MSG_2_LINE(A,B) A "\0" B "\0"
|
||||
#define MSG_3_LINE(A,B,C) A "\0" B "\0" C
|
||||
|
||||
//
|
||||
// Filament Change screens show up to 3 lines on a 4-line display
|
||||
// ...or up to 2 lines on a 3-line display
|
||||
@@ -600,12 +602,9 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correction");
|
||||
PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
|
||||
|
||||
|
||||
PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Level X Axis");
|
||||
PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrate");
|
||||
PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Heater Timeout");
|
||||
PROGMEM Language_Str MSG_REHEAT = _UxGT("Reheat");
|
||||
PROGMEM Language_Str MSG_REHEATING = _UxGT("Reheating...");
|
||||
}
|
||||
|
||||
#if FAN_COUNT == 1
|
||||
|
||||
@@ -39,39 +39,22 @@ namespace Language_gl {
|
||||
PROGMEM Language_Str LANGUAGE = _UxGT("Galician");
|
||||
|
||||
PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" lista.");
|
||||
PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
|
||||
PROGMEM Language_Str MSG_YES = _UxGT("SI");
|
||||
PROGMEM Language_Str MSG_NO = _UxGT("NON");
|
||||
PROGMEM Language_Str MSG_BACK = _UxGT("Atrás");
|
||||
PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
|
||||
PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Tarxeta inserida");
|
||||
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tarxeta retirada");
|
||||
PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("SD/USB lanzado");
|
||||
PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Agardando ao SD/USB");
|
||||
PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Erro lectura SD/USB");
|
||||
PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
|
||||
PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
|
||||
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("FinCarro");
|
||||
PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("FinCarro SW");
|
||||
PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
|
||||
PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Axustes avanzados");
|
||||
PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración");
|
||||
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
|
||||
PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autoarranque");
|
||||
PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
|
||||
PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración");
|
||||
PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progreso");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ir a orixe");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Ir orixe X");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Ir orixe Y");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Ir orixe Z");
|
||||
PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Autoaliñar Z");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Ir orixes XYZ");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Prema pulsador");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Seguinte punto");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Fin Nivelación!");
|
||||
PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Compensación Altura");
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Axustar Desfases");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfases aplicados");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivelado feito");
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Offsets na orixe");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets fixados");
|
||||
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Fixar orixe");
|
||||
PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Prequentar ") PREHEAT_1_LABEL;
|
||||
PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Prequentar ") PREHEAT_1_LABEL " ~";
|
||||
@@ -87,151 +70,19 @@ namespace Language_gl {
|
||||
PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Todo");
|
||||
PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Cama");
|
||||
PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" conf");
|
||||
PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Preque. Personali.");
|
||||
PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Arrefriar");
|
||||
PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frecuencia");
|
||||
PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Control Láser");
|
||||
PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Láser Apagado");
|
||||
PROGMEM Language_Str MSG_LASER_ON = _UxGT("Láser Aceso");
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Potencia Láser");
|
||||
PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Control Fuso");
|
||||
PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Fuso Apagado");
|
||||
PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Fuso Aceso");
|
||||
PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Potencia Fuso");
|
||||
PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Inverter xiro");
|
||||
PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Acender");
|
||||
PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Apagar");
|
||||
PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruír");
|
||||
PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudir");
|
||||
PROGMEM Language_Str MSG_RETRACT = _UxGT("Retraer");
|
||||
PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover eixe");
|
||||
PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelando Cama");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar Cama");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Nivelar Cantos");
|
||||
PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Seguinte Canto");
|
||||
PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor Mallado");
|
||||
PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Editar Mallado");
|
||||
PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Ed. Mallado Detida");
|
||||
PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Punto de Proba");
|
||||
PROGMEM Language_Str MSG_MESH_X = _UxGT("Índice X");
|
||||
PROGMEM Language_Str MSG_MESH_Y = _UxGT("Índice Y");
|
||||
PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valor Z");
|
||||
PROGMEM Language_Str MSG_USER_MENU = _UxGT("Comandos Personaliz.");
|
||||
PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Probar Sonda");
|
||||
PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punto");
|
||||
PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Desviación");
|
||||
PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
|
||||
PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Ferramentas Compens");
|
||||
PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
|
||||
PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicación");
|
||||
PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Espello");
|
||||
PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
|
||||
PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2º Bico X");
|
||||
PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2º Bico Y");
|
||||
PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2º Bico Z");
|
||||
PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Executando G29");
|
||||
PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
|
||||
PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
|
||||
PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
|
||||
PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Facer Malla Manual");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Colocar Calzo e Medir");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Medir");
|
||||
PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Quitar e Medir Cama");
|
||||
PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover ao Seguinte");
|
||||
PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
|
||||
PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp Cama");
|
||||
PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp Cama");
|
||||
PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp Bico");
|
||||
PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp Bico");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Editar Malla");
|
||||
PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Malla Person.");
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Axuste Fino da Malla");
|
||||
PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Fin Edición da Malla");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Malla Person.");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Malla");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Crear Malla (") PREHEAT_1_LABEL _UxGT(")");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Crear Malla (") PREHEAT_2_LABEL _UxGT(")");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Malla Fría");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Axustar Altura Malla");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altura");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malla");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Validar Malla (") PREHEAT_1_LABEL _UxGT(")");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Validar Malla (") PREHEAT_2_LABEL _UxGT(")");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malla perso.");
|
||||
PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Quentando Cama");
|
||||
PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Quentando Bico");
|
||||
PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Traballo manual...");
|
||||
PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Traballo Lonxit Fixa");
|
||||
PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Fin Traballo");
|
||||
PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Cancelado");
|
||||
PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Saíndo de G26");
|
||||
PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malla");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Nivelación Malla");
|
||||
PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelación 3Puntos");
|
||||
PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelación Grid");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malla");
|
||||
PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterais");
|
||||
PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa ");
|
||||
PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Gardar Mapa");
|
||||
PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar ao Host");
|
||||
PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Gardar en CSV");
|
||||
PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup Externo");
|
||||
PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Info do UBL");
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidade de Recheo");
|
||||
PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Recheo Manual");
|
||||
PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Recheo Intelixente");
|
||||
PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Recheo da Malla");
|
||||
PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
|
||||
PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar cercanos");
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Axustar Fino Todo");
|
||||
PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Axustar Fino Cerc");
|
||||
PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacenamento Malla");
|
||||
PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Rañura Memoria");
|
||||
PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Cargar Malla Cama");
|
||||
PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Gardar Malla Cama");
|
||||
PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Malla %i Cargada");
|
||||
PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Malla %i Gardada");
|
||||
PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Sen Gardar");
|
||||
PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Erro: Gardadado UBL");
|
||||
PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Erro: Recuperación UBL");
|
||||
PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
|
||||
PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Detido");
|
||||
PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
|
||||
PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Crear Malla Fría");
|
||||
PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Recheo Intelixente");
|
||||
PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validar Malla");
|
||||
PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Axustar Fino Todo");
|
||||
PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validar Malla");
|
||||
PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Axustar Fino Todo");
|
||||
PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Gardar Malla Cama");
|
||||
|
||||
PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Control LED");
|
||||
PROGMEM Language_Str MSG_LEDS = _UxGT("Luces");
|
||||
PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Axustes Luz");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Vermello");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Laranxa");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Amarelo");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Verde");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Azul");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Branco");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
|
||||
PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Luces personalizadas");
|
||||
PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensidade Vermello");
|
||||
PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensidade Verde");
|
||||
PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensidade Azul");
|
||||
PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensidade Branco");
|
||||
PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brillo");
|
||||
|
||||
PROGMEM Language_Str MSG_MOVING = _UxGT("Movendo...");
|
||||
PROGMEM Language_Str MSG_FREE_XY = _UxGT("Libre XY");
|
||||
PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelar cama");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar cama");
|
||||
PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
|
||||
PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
|
||||
PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
|
||||
PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
|
||||
PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extrusor *");
|
||||
PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Bico moi frío");
|
||||
PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mover %smm");
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
|
||||
@@ -240,66 +91,17 @@ namespace Language_gl {
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Cama Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Bico");
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Bico ~");
|
||||
PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Bico Estacionado");
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Bico Standby");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Cama");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Cámara");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ventilador Mem. ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Vent. Extra");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Vent. Extra ~");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Controlador Vent.");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Velocidade Repouso");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo Auto");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Velocidade Activa");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Tempo Repouso");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Velocidade vent.");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Velocidade vent. ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxo ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
|
||||
PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
|
||||
PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
|
||||
PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("Acender");
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Apagar");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("Auto-Sint. PID");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("Auto-Sint. PID *");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_PID_F = _UxGT("PID-F");
|
||||
PROGMEM Language_Str MSG_PID_F_E = _UxGT("PID-F *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Escolla");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Escolla *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Acel");
|
||||
PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
|
||||
PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Jerk");
|
||||
PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Jerk");
|
||||
PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Jerk");
|
||||
PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-Jerk");
|
||||
PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Desvío Unión");
|
||||
PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocidade");
|
||||
PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
|
||||
PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
|
||||
PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("V-viaxe min");
|
||||
PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Aceleración");
|
||||
PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Amax *");
|
||||
PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrac.");
|
||||
PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-viaxe");
|
||||
PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
|
||||
PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm");
|
||||
PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm");
|
||||
@@ -312,294 +114,102 @@ namespace Language_gl {
|
||||
PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm³");
|
||||
PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diam. fil.");
|
||||
PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Diam. fil. *");
|
||||
PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
|
||||
PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carga mm");
|
||||
PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avance K");
|
||||
PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Avance K *");
|
||||
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Constraste LCD");
|
||||
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gardar Configuración");
|
||||
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar Configuración");
|
||||
PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Rest. Defecto");
|
||||
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
|
||||
PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Erro: CRC EEPROM");
|
||||
PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Erro: Índice EEPROM");
|
||||
PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Erro: Versión EEPROM");
|
||||
PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB");
|
||||
PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reiniciar Impresora");
|
||||
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
|
||||
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Información");
|
||||
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gardar en memo.");
|
||||
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar de memo.");
|
||||
PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Cargar de firm.");
|
||||
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Volver a cargar");
|
||||
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Monitorizacion");
|
||||
PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
|
||||
PROGMEM Language_Str MSG_TUNE = _UxGT("Axustar");
|
||||
PROGMEM Language_Str MSG_START_PRINT = _UxGT("Comezar impresión");
|
||||
PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Seguinte");
|
||||
PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Comezar");
|
||||
PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Deter");
|
||||
PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimir");
|
||||
PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reiniciar");
|
||||
PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Cancelar");
|
||||
PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Listo");
|
||||
PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Atrás");
|
||||
PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Proceder");
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
|
||||
PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Retomar impresión");
|
||||
PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Deter impresión");
|
||||
PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Imprimindo Obxecto");
|
||||
PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancelar Obxecto");
|
||||
PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Obxecto =");
|
||||
PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impresión");
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impres.");
|
||||
PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Seguir impres.");
|
||||
PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Deter impres.");
|
||||
PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Tarxeta SD");
|
||||
PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Sen tarxeta SD");
|
||||
PROGMEM Language_Str MSG_DWELL = _UxGT("En repouso...");
|
||||
PROGMEM Language_Str MSG_USERWAIT = _UxGT("A espera...");
|
||||
PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Prema para Retomar");
|
||||
PROGMEM Language_Str MSG_PRINTING = _UxGT("Imprimindo...");
|
||||
PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impresión Cancelada");
|
||||
PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Fin Impresión");
|
||||
PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impre. cancelada");
|
||||
PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sen movemento.");
|
||||
PROGMEM Language_Str MSG_KILLED = _UxGT("MORTO.");
|
||||
PROGMEM Language_Str MSG_STOPPED = _UxGT("DETIDO.");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
|
||||
PROGMEM Language_Str MSG_KILLED = _UxGT("PROGRAMA MORTO");
|
||||
PROGMEM Language_Str MSG_STOPPED = _UxGT("PROGRAMA PARADO");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraccion mm");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Cambio retra. mm");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraccion V");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Alzar Z mm");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Recup. retra. mm");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Cambio recup. mm");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Recuperacion V");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
|
||||
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retracción");
|
||||
PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Lonxitude Retracción");
|
||||
PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lonxitude de Purga");
|
||||
PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Cambiar Ferramenta");
|
||||
PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Velocidade prim.");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Vel. de Retracción");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar Filamento");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambiar Filamento *");
|
||||
PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Cargar Filamento");
|
||||
PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Cargar Filamento *");
|
||||
PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Descargar Filamento");
|
||||
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Descargar Filamento *");
|
||||
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar Todo");
|
||||
PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB");
|
||||
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB");
|
||||
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB");
|
||||
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda-Z fóra Cama");
|
||||
PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Factor de Desviación");
|
||||
PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Cmd: Auto-Test");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Cmd: Reiniciar");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Recoller");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Estender");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: Modo Software");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: Modo 5V");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: Modo OD");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Cmd: Modo Almacenar");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Axustar BLTouch a 5V");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Axustar BLTouch a OD");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Modo de Informe");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERIGO: Unha mala configuración pode producir daños! Proceder igualmente?");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test de Desfase Z");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Gardar");
|
||||
PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estender TouchMI");
|
||||
PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda Z");
|
||||
PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Recoller Sonda Z");
|
||||
PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Orixe %s%s%s Primeiro");
|
||||
PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Desfases Sonda");
|
||||
PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Desfase Sonda X");
|
||||
PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Desfase Sonda Y");
|
||||
PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
|
||||
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto.");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar filamen.");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambiar filamen. *");
|
||||
PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Iniciando SD");
|
||||
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD");
|
||||
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda-Z sen cama");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Comprobar BLTouch");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Iniciar BLTouch");
|
||||
PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropaso X");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
|
||||
PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Erro FinCarro");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Fallo Quentando");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Fallo Quent. Cama");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Fallo Quent. Cámara");
|
||||
PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CÁMARA");
|
||||
PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Erro:TEMP MÁX");
|
||||
PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Erro:TEMP MÍN");
|
||||
PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Erro:TEMP MÁX CAMA");
|
||||
PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Erro:TEMP MÍN CAMA");
|
||||
PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Erro:TEMP MÁX CÁMARA");
|
||||
PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Erro:TEMP MÍN CÁMARA");
|
||||
PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Orixe XY Primeiro");
|
||||
PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESORA DETIDA");
|
||||
PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Erro fin carro");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Fallo quentando");
|
||||
PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro temperatura");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Temp. excesiva");
|
||||
PROGMEM Language_Str MSG_HALTED = _UxGT("SISTEMA MORTO");
|
||||
PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Debe reiniciar!");
|
||||
PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
|
||||
PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
|
||||
PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
|
||||
PROGMEM Language_Str MSG_HEATING = _UxGT("Quentando...");
|
||||
PROGMEM Language_Str MSG_COOLING = _UxGT("Arrefriando...");
|
||||
PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Quentando cama...");
|
||||
PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Enfriando Cama...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Quentando Cámara...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Arrefriando Cámara...");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
|
||||
PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
|
||||
PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
|
||||
PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Ax. Altura Delta");
|
||||
PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Axustar Sonda Z");
|
||||
PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
|
||||
PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altura");
|
||||
PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radio");
|
||||
PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Acerca de...");
|
||||
PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Información");
|
||||
PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Nivelación 3puntos");
|
||||
PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Nivelación Lineal");
|
||||
PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Nivelación Bilineal");
|
||||
PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Nivelación UBL");
|
||||
PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nivelación en Malla");
|
||||
PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
|
||||
PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Informacion");
|
||||
PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadisticas");
|
||||
PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Placa nai");
|
||||
PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
|
||||
PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
|
||||
PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudios");
|
||||
PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
|
||||
PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Reloxo Traballo: OFF");
|
||||
PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Reloxo Traballo: ON");
|
||||
|
||||
PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz da Caixa");
|
||||
PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo Luces");
|
||||
PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("IMPRESORA INCORRECTA");
|
||||
|
||||
PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz");
|
||||
#if LCD_WIDTH >= 20
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total Impresións");
|
||||
PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo Total Imp.");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impresión máis longa");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruído");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total traballos");
|
||||
PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Total completos");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo impresion");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Traballo +longo");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total extruido");
|
||||
#else
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impresións");
|
||||
PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Máis Longa");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Traballos");
|
||||
PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completos");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("O +longo");
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
|
||||
PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
|
||||
PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Fonte alime.");
|
||||
PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Potencia motor");
|
||||
PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Garda DAC EEPROM");
|
||||
|
||||
PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
|
||||
PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
|
||||
PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Fonte Alimentación");
|
||||
PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Forza do Motor");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("X Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z Driver %");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
|
||||
PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERRO CONEX. TMC");
|
||||
PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCIÓN DE RETOMAR:");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar máis");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Retomar traballo");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bico: ");
|
||||
PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sensor Filamento");
|
||||
PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm Sensor Fil");
|
||||
PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Fallo ao ir á Orixe");
|
||||
PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Fallo ao Sondar");
|
||||
PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Moi Frío");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Segue traballo");
|
||||
|
||||
PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ESCOLLE FILAMENTO");
|
||||
PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
|
||||
PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("Actualizar FW MMU!");
|
||||
PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Precisa Atención.");
|
||||
PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Retomar impr.");
|
||||
PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Retomando...");
|
||||
PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
|
||||
PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
|
||||
PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar até bico");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Expulsar Filamento ~");
|
||||
PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
|
||||
PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
|
||||
PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil...");
|
||||
PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Todo");
|
||||
PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
|
||||
PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
|
||||
PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Expulsar, premer");
|
||||
|
||||
PROGMEM Language_Str MSG_MIX = _UxGT("Mestura");
|
||||
PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Compoñente =");
|
||||
PROGMEM Language_Str MSG_MIXER = _UxGT("Mesturadora");
|
||||
PROGMEM Language_Str MSG_GRADIENT = _UxGT("Degradado");
|
||||
PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Degradado Total");
|
||||
PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Mestura Conmutada");
|
||||
PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Mestura Cíclica");
|
||||
PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Mestura de Degradado");
|
||||
PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Degradado Inverso");
|
||||
PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Activar Ferr-V");
|
||||
PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Inicio Ferr-V");
|
||||
PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Fin Ferr-V");
|
||||
PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias Ferr-V");
|
||||
PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reiniciar Ferr-V");
|
||||
PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit mest. Ferr-V");
|
||||
PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("Ferr-V reiniciadas");
|
||||
PROGMEM Language_Str MSG_START_Z = _UxGT("Inicio Z:");
|
||||
PROGMEM Language_Str MSG_END_Z = _UxGT(" Fin Z:");
|
||||
|
||||
PROGMEM Language_Str MSG_GAMES = _UxGT("Xogos");
|
||||
PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
|
||||
PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
|
||||
PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
|
||||
PROGMEM Language_Str MSG_MAZE = _UxGT("Labirinto");
|
||||
PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Impresora incorrecta");
|
||||
|
||||
#if LCD_HEIGHT >= 4
|
||||
PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Preme o botón para", "continuar impresión"));
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Agarde para", "comezar cambio", "de filamento"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Introduza o", "filamento e", "faga click"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Prema o botón para", "quentar o bico"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Quentando bico", "Agarde, por favor..."));
|
||||
// Up to 3 lines allowed
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Agarde para", "iniciar troco", "de filamento"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Agarde pola", "descarga do", "filamento"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Introduza o", "filamento e", "faga click"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Agarde pola", "carga do", "filamento"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Agarde para", "purgar o filamento"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Prema para finalizar", "a purga do filamen."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Agarde a que", "se retome", "a impresión"));
|
||||
#else
|
||||
PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premer para continuar"));
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Agarde para", "seguir co", "traballo"));
|
||||
#else // LCD_HEIGHT < 4
|
||||
// Up to 2 lines allowed
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Agarde..."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Introduza e click"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Prema para quentar"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Quentando..."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Descargando..."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Introduza e click"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Prema para finalizar"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Retomando..."));
|
||||
#endif
|
||||
|
||||
PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
|
||||
PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Controlador Actual");
|
||||
PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Limiar Hibrido");
|
||||
PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Orixe sen Sensores");
|
||||
PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
|
||||
PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
|
||||
PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reiniciar");
|
||||
PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" dentro:");
|
||||
PROGMEM Language_Str MSG_BACKLASH = _UxGT("Reacción");
|
||||
PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Corrección");
|
||||
PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
|
||||
|
||||
PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Nivel Eixe X");
|
||||
PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrar");
|
||||
PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Tempo exc. Quent.");
|
||||
PROGMEM Language_Str MSG_REHEAT = _UxGT("Requentar");
|
||||
PROGMEM Language_Str MSG_REHEATING = _UxGT("Requentando...");
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Seguindo..."));
|
||||
#endif // LCD_HEIGHT < 4
|
||||
}
|
||||
|
||||
@@ -88,7 +88,6 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" conf");
|
||||
PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Prerisc.personal.");
|
||||
PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Raffredda");
|
||||
PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frequenza");
|
||||
PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Controllo laser");
|
||||
PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Laser Off");
|
||||
PROGMEM Language_Str MSG_LASER_ON = _UxGT("Laser On");
|
||||
@@ -350,8 +349,7 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_USERWAIT = _UxGT("Premi tasto..");
|
||||
PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Stampa sospesa");
|
||||
PROGMEM Language_Str MSG_PRINTING = _UxGT("Stampa...");
|
||||
PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Stampa Annullata");
|
||||
PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Stampa Eseguita");
|
||||
PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Stampa annullata");
|
||||
PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Nessun Movimento");
|
||||
PROGMEM Language_Str MSG_KILLED = _UxGT("UCCISO. ");
|
||||
PROGMEM Language_Str MSG_STOPPED = _UxGT("ARRESTATO. ");
|
||||
@@ -370,7 +368,6 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Risalita Z");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Velocità innesco");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Velocità retrazione");
|
||||
PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Ugello Parcheggiato");
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Standby ugello");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambia filamento");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambia filamento *");
|
||||
@@ -584,7 +581,7 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Drivers TMC");
|
||||
PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Driver in uso");
|
||||
PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Soglia modo ibrido");
|
||||
PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Azzer. senza sens.");
|
||||
PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Azzer. sensorless");
|
||||
PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Modo stepping");
|
||||
PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop abil.");
|
||||
|
||||
@@ -596,11 +593,5 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correzione");
|
||||
PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Appianamento");
|
||||
|
||||
PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Livello asse X");
|
||||
PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibra");
|
||||
PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Timeout riscaldatore");
|
||||
PROGMEM Language_Str MSG_REHEAT = _UxGT("Riscalda");
|
||||
PROGMEM Language_Str MSG_REHEATING = _UxGT("Riscaldando...");
|
||||
PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
|
||||
}
|
||||
|
||||
@@ -523,6 +523,10 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
|
||||
PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
|
||||
|
||||
#define MSG_1_LINE(A) A "\0" "\0"
|
||||
#define MSG_2_LINE(A,B) A "\0" B "\0"
|
||||
#define MSG_3_LINE(A,B,C) A "\0" B "\0" C
|
||||
|
||||
//
|
||||
// Filament Change screens show up to 3 lines on a 4-line display
|
||||
// ...or up to 2 lines on a 3-line display
|
||||
|
||||
@@ -549,6 +549,10 @@ namespace Language_tr {
|
||||
PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
|
||||
PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
|
||||
|
||||
#define MSG_1_LINE(A) A "\0" "\0"
|
||||
#define MSG_2_LINE(A,B) A "\0" B "\0"
|
||||
#define MSG_3_LINE(A,B,C) A "\0" B "\0" C
|
||||
|
||||
//
|
||||
// Filament Değişim ekranları 4 satırlı ekranda 3 satıra kadar gösterilir
|
||||
// ...veya 3 satırlı ekranda 2 satıra kadar
|
||||
|
||||
@@ -546,6 +546,10 @@ namespace Language_zh_TW {
|
||||
PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
|
||||
PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
|
||||
|
||||
#define MSG_1_LINE(A) A "\0" "\0"
|
||||
#define MSG_2_LINE(A,B) A "\0" B "\0"
|
||||
#define MSG_3_LINE(A,B,C) A "\0" B "\0" C
|
||||
|
||||
//
|
||||
// Filament Change screens show up to 3 lines on a 4-line display
|
||||
// ...or up to 2 lines on a 3-line display
|
||||
|
||||
@@ -432,7 +432,7 @@ void menu_cancelobject();
|
||||
#endif
|
||||
#if HAS_CLASSIC_JERK
|
||||
constexpr xyze_float_t max_jerk_edit =
|
||||
#ifdef MAX_JERK_EDIT_VALUES
|
||||
#ifdef MAX_ACCEL_EDIT_VALUES
|
||||
MAX_JERK_EDIT_VALUES
|
||||
#elif ENABLED(LIMITED_JERK_EDITING)
|
||||
{ (DEFAULT_XJERK) * 2, (DEFAULT_YJERK) * 2, (DEFAULT_ZJERK) * 2, (DEFAULT_EJERK) * 2 }
|
||||
|
||||
@@ -36,29 +36,18 @@
|
||||
|
||||
START_MENU();
|
||||
BACK_ITEM(MSG_MAIN);
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
EDIT_ITEM_FAST(CUTTER_MENU_POWER_TYPE, MSG_CUTTER(POWER), &cutter.setPower, cutter.interpret_power(SPEED_POWER_MIN), cutter.interpret_power(SPEED_POWER_MAX),
|
||||
[]{
|
||||
if (cutter.isOn) {
|
||||
cutter.power = cutter.setPower;
|
||||
}
|
||||
});
|
||||
#endif
|
||||
|
||||
if (cutter.enabled() && cutter.isOn)
|
||||
if (cutter.enabled()) {
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
EDIT_ITEM(CUTTER_MENU_TYPE, MSG_CUTTER(POWER), &cutter.power, SPEED_POWER_MIN, SPEED_POWER_MAX);
|
||||
#endif
|
||||
ACTION_ITEM(MSG_CUTTER(OFF), cutter.disable);
|
||||
}
|
||||
else {
|
||||
ACTION_ITEM(MSG_CUTTER(ON), cutter.enable_forward);
|
||||
#if ENABLED(SPINDLE_CHANGE_DIR)
|
||||
ACTION_ITEM(MSG_SPINDLE_REVERSE, cutter.enable_reverse);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
#if ENABLED(HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY)
|
||||
EDIT_ITEM_FAST(CUTTER_MENU_FREQUENCY_TYPE, MSG_CUTTER_FREQUENCY, &cutter.frequency, 2000, 50000,[]{ cutter.refresh_frequency();});
|
||||
#endif
|
||||
#endif
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
|
||||
+59
-56
@@ -121,6 +121,10 @@ MarlinUI ui;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(INIT_SDCARD_ON_BOOT)
|
||||
uint8_t lcd_sd_status;
|
||||
#endif
|
||||
|
||||
#if HAS_LCD_MENU && LCD_TIMEOUT_TO_STATUS
|
||||
bool MarlinUI::defer_return_to_status;
|
||||
#endif
|
||||
@@ -338,8 +342,13 @@ void MarlinUI::init() {
|
||||
|
||||
#endif // HAS_SHIFT_ENCODER
|
||||
|
||||
#if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT)
|
||||
SET_INPUT_PULLUP(SD_DETECT_PIN);
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#if PIN_EXISTS(SD_DETECT)
|
||||
SET_INPUT_PULLUP(SD_DETECT_PIN);
|
||||
#endif
|
||||
#if ENABLED(INIT_SDCARD_ON_BOOT)
|
||||
lcd_sd_status = 2; // UNKNOWN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAS_ENCODER_ACTION && HAS_SLOW_BUTTONS
|
||||
@@ -735,11 +744,11 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
*/
|
||||
|
||||
LCDViewAction MarlinUI::lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW;
|
||||
millis_t next_lcd_update_ms;
|
||||
|
||||
void MarlinUI::update() {
|
||||
|
||||
static uint16_t max_display_update_time = 0;
|
||||
static millis_t next_lcd_update_ms;
|
||||
millis_t ms = millis();
|
||||
|
||||
#if HAS_LCD_MENU && LCD_TIMEOUT_TO_STATUS
|
||||
@@ -815,6 +824,53 @@ void MarlinUI::update() {
|
||||
|
||||
#endif // HAS_LCD_MENU
|
||||
|
||||
#if ENABLED(INIT_SDCARD_ON_BOOT)
|
||||
//
|
||||
// SPI SD Card detection (and first card init when the LCD is present)
|
||||
//
|
||||
const uint8_t sd_status = (uint8_t)IS_SD_INSERTED();
|
||||
if (sd_status != lcd_sd_status && detected()) {
|
||||
|
||||
uint8_t old_sd_status = lcd_sd_status; // prevent re-entry to this block!
|
||||
lcd_sd_status = sd_status;
|
||||
|
||||
if (sd_status) {
|
||||
safe_delay(500); // Some boards need a delay to get settled
|
||||
card.mount();
|
||||
if (old_sd_status == 2)
|
||||
card.beginautostart(); // Initial boot
|
||||
else
|
||||
set_status_P(GET_TEXT(MSG_MEDIA_INSERTED));
|
||||
}
|
||||
#if PIN_EXISTS(SD_DETECT)
|
||||
else {
|
||||
card.release();
|
||||
if (old_sd_status != 2) {
|
||||
set_status_P(GET_TEXT(MSG_MEDIA_REMOVED));
|
||||
#if HAS_LCD_MENU
|
||||
return_to_status();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#if DISABLED(NO_LCD_REINIT)
|
||||
init_lcd(); // May revive the LCD if static electricity killed it
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
refresh();
|
||||
|
||||
ms = millis();
|
||||
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL; // delay LCD update until after SD activity completes
|
||||
|
||||
#ifdef LED_BACKLIGHT_TIMEOUT
|
||||
leds.reset_timeout(ms);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // INIT_SDCARD_ON_BOOT
|
||||
|
||||
if (ELAPSED(ms, next_lcd_update_ms)
|
||||
#if HAS_GRAPHICAL_LCD
|
||||
|| drawing_screen
|
||||
@@ -1539,56 +1595,3 @@ void MarlinUI::update() {
|
||||
}
|
||||
|
||||
#endif // !HAS_DISPLAY
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
|
||||
void MarlinUI::media_changed(const uint8_t old_status, const uint8_t status) {
|
||||
if (old_status == status) {
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMediaError(); // Failed to mount/unmount
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
if (status) {
|
||||
if (old_status < 2) {
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMediaInserted(); // ExtUI response
|
||||
#endif
|
||||
set_status_P(GET_TEXT(MSG_MEDIA_INSERTED));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (old_status < 2) {
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
ExtUI::onMediaRemoved(); // ExtUI response
|
||||
#endif
|
||||
#if PIN_EXISTS(SD_DETECT)
|
||||
set_status_P(GET_TEXT(MSG_MEDIA_REMOVED));
|
||||
#if HAS_LCD_MENU
|
||||
return_to_status();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#if PIN_EXISTS(SD_DETECT) && DISABLED(NO_LCD_REINIT)
|
||||
init_lcd(); // Revive a noisy shared SPI LCD
|
||||
#endif
|
||||
|
||||
refresh();
|
||||
|
||||
#if HAS_SPI_LCD || defined(LED_BACKLIGHT_TIMEOUT)
|
||||
const millis_t ms = millis();
|
||||
#endif
|
||||
|
||||
#if HAS_SPI_LCD
|
||||
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL; // Delay LCD update for SD activity
|
||||
#endif
|
||||
|
||||
#ifdef LED_BACKLIGHT_TIMEOUT
|
||||
leds.reset_timeout(ms);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // SDSUPPORT
|
||||
|
||||
@@ -274,10 +274,6 @@ public:
|
||||
// LCD implementations
|
||||
static void clear_lcd();
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
static void media_changed(const uint8_t old_stat, const uint8_t stat);
|
||||
#endif
|
||||
|
||||
#if HAS_SPI_LCD
|
||||
static bool detected();
|
||||
static void init_lcd();
|
||||
|
||||
@@ -106,7 +106,8 @@ void Stopwatch::reset() {
|
||||
}
|
||||
|
||||
millis_t Stopwatch::duration() {
|
||||
return accumulator + MS_TO_SEC((isRunning() ? millis() : stopTimestamp) - startTimestamp);
|
||||
return ((isRunning() ? millis() : stopTimestamp)
|
||||
- startTimestamp) / 1000UL + accumulator;
|
||||
}
|
||||
|
||||
#if ENABLED(DEBUG_STOPWATCH)
|
||||
|
||||
@@ -815,10 +815,11 @@ void Planner::calculate_trapezoid_for_block(block_t* const block, const float &e
|
||||
#if ENABLED(S_CURVE_ACCELERATION)
|
||||
// Jerk controlled speed requires to express speed versus time, NOT steps
|
||||
uint32_t acceleration_time = ((float)(cruise_rate - initial_rate) / accel) * (STEPPER_TIMER_RATE),
|
||||
deceleration_time = ((float)(cruise_rate - final_rate) / accel) * (STEPPER_TIMER_RATE),
|
||||
deceleration_time = ((float)(cruise_rate - final_rate) / accel) * (STEPPER_TIMER_RATE);
|
||||
|
||||
// And to offload calculations from the ISR, we also calculate the inverse of those times here
|
||||
acceleration_time_inverse = get_period_inverse(acceleration_time),
|
||||
deceleration_time_inverse = get_period_inverse(deceleration_time);
|
||||
uint32_t acceleration_time_inverse = get_period_inverse(acceleration_time);
|
||||
uint32_t deceleration_time_inverse = get_period_inverse(deceleration_time);
|
||||
#endif
|
||||
|
||||
// Store new block parameters
|
||||
@@ -833,47 +834,6 @@ void Planner::calculate_trapezoid_for_block(block_t* const block, const float &e
|
||||
block->cruise_rate = cruise_rate;
|
||||
#endif
|
||||
block->final_rate = final_rate;
|
||||
|
||||
/**
|
||||
* Laser trapezoid calculations
|
||||
*
|
||||
* Approximate the trapezoid with the laser, incrementing the power every `entry_per` while accelerating
|
||||
* and decrementing it every `exit_power_per` while decelerating, thus ensuring power is related to feedrate.
|
||||
*
|
||||
* LASER_POWER_INLINE_TRAPEZOID_CONT doesn't need this as it continuously approximates
|
||||
*
|
||||
* Note this may behave unreliably when running with S_CURVE_ACCELERATION
|
||||
*/
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
if (block->laser.power > 0) { // No need to care if power == 0
|
||||
const uint8_t entry_power = block->laser.power * entry_factor; // Power on block entry
|
||||
#if DISABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
// Speedup power
|
||||
const uint8_t entry_power_diff = block->laser.power - entry_power;
|
||||
if (entry_power_diff) {
|
||||
block->laser.entry_per = accelerate_steps / entry_power_diff;
|
||||
block->laser.power_entry = entry_power;
|
||||
}
|
||||
else {
|
||||
block->laser.entry_per = 0;
|
||||
block->laser.power_entry = block->laser.power;
|
||||
}
|
||||
// Slowdown power
|
||||
const uint8_t exit_power = block->laser.power * exit_factor, // Power on block entry
|
||||
exit_power_diff = block->laser.power - exit_power;
|
||||
if (exit_power_diff) {
|
||||
block->laser.exit_per = (block->step_event_count - block->decelerate_after) / exit_power_diff;
|
||||
block->laser.power_exit = exit_power;
|
||||
}
|
||||
else {
|
||||
block->laser.exit_per = 0;
|
||||
block->laser.power_exit = block->laser.power;
|
||||
}
|
||||
#else
|
||||
block->laser.power_entry = entry_power;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* PLANNER SPEED DEFINITION
|
||||
@@ -1853,12 +1813,6 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
|
||||
// Set direction bits
|
||||
block->direction_bits = dm;
|
||||
|
||||
// Update block laser power
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
block->laser.status = settings.laser.status;
|
||||
block->laser.power = settings.laser.power;
|
||||
#endif
|
||||
|
||||
// Number of steps for each axis
|
||||
// See http://www.corexy.com/theory.html
|
||||
#if CORE_IS_XY
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
#endif
|
||||
|
||||
#if HAS_CUTTER
|
||||
#include "../feature/spindle_laser_types.h"
|
||||
#include "../feature/spindle_laser.h"
|
||||
#endif
|
||||
|
||||
// Feedrate for manual moves
|
||||
@@ -88,23 +88,6 @@ enum BlockFlag : char {
|
||||
BLOCK_FLAG_SYNC_POSITION = _BV(BLOCK_BIT_SYNC_POSITION)
|
||||
};
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
|
||||
typedef struct {
|
||||
uint8_t status, // See planner settings for meaning
|
||||
power; // Ditto; When in trapezoid mode this is nominal power
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
uint8_t power_entry; // Entry power for the laser
|
||||
#if DISABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
uint8_t power_exit; // Exit power for the laser
|
||||
uint32_t entry_per, // Steps per power increment (to avoid floats in stepper calcs)
|
||||
exit_per; // Steps per power decrement
|
||||
#endif
|
||||
#endif
|
||||
} block_laser_t;
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct block_t
|
||||
*
|
||||
@@ -191,36 +174,12 @@ typedef struct block_t {
|
||||
uint32_t sdpos;
|
||||
#endif
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
block_laser_t laser;
|
||||
#endif
|
||||
|
||||
} block_t;
|
||||
|
||||
#define HAS_POSITION_FLOAT ANY(LIN_ADVANCE, SCARA_FEEDRATE_SCALING, GRADIENT_MIX, LCD_SHOW_E_TOTAL)
|
||||
|
||||
#define BLOCK_MOD(n) ((n)&(BLOCK_BUFFER_SIZE-1))
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
typedef struct {
|
||||
/**
|
||||
* Laser status bitmask; most bits are unused;
|
||||
* 0: Planner buffer enable
|
||||
* 1: Laser enable
|
||||
* 2: Reserved for direction
|
||||
*/
|
||||
uint8_t status;
|
||||
/**
|
||||
* Laser power: 0 or 255 in case of PWM-less laser,
|
||||
* or the OCR value;
|
||||
*
|
||||
* Using OCR instead of raw power,
|
||||
* as it avoids floating points during move loop
|
||||
*/
|
||||
uint8_t power;
|
||||
} settings_laser_t;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
uint32_t max_acceleration_mm_per_s2[XYZE_N], // (mm/s^2) M201 XYZE
|
||||
min_segment_time_us; // (µs) M205 B
|
||||
@@ -231,9 +190,6 @@ typedef struct {
|
||||
travel_acceleration; // (mm/s^2) M204 T - Travel acceleration. DEFAULT ACCELERATION for all NON printing moves.
|
||||
feedRate_t min_feedrate_mm_s, // (mm/s) M205 S - Minimum linear feedrate
|
||||
min_travel_feedrate_mm_s; // (mm/s) M205 T - Minimum travel feedrate
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
settings_laser_t laser;
|
||||
#endif
|
||||
} planner_settings_t;
|
||||
|
||||
#if DISABLED(SKEW_CORRECTION)
|
||||
|
||||
+23
-163
@@ -133,10 +133,6 @@ Stepper stepper; // Singleton
|
||||
#include "../feature/powerloss.h"
|
||||
#endif
|
||||
|
||||
#if HAS_CUTTER
|
||||
#include "../feature/spindle_laser.h"
|
||||
#endif
|
||||
|
||||
// public:
|
||||
|
||||
#if HAS_EXTRA_ENDSTOPS || ENABLED(Z_STEPPER_AUTO_ALIGN)
|
||||
@@ -240,20 +236,6 @@ xyz_long_t Stepper::endstops_trigsteps;
|
||||
xyze_long_t Stepper::count_position{0};
|
||||
xyze_int8_t Stepper::count_direction{0};
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
Stepper::stepper_laser_t Stepper::laser = {
|
||||
.trap_en = false,
|
||||
.cur_power = 0,
|
||||
.cruise_set = false,
|
||||
#if DISABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
.last_step_count = 0,
|
||||
.acc_step_count = 0
|
||||
#else
|
||||
.till_update = 0
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
#define DUAL_ENDSTOP_APPLY_STEP(A,V) \
|
||||
if (separate_multi_axis) { \
|
||||
if (A##_HOME_DIR < 0) { \
|
||||
@@ -1692,9 +1674,10 @@ uint32_t Stepper::block_phase_isr() {
|
||||
|
||||
#if ENABLED(S_CURVE_ACCELERATION)
|
||||
// Get the next speed to use (Jerk limited!)
|
||||
uint32_t acc_step_rate = acceleration_time < current_block->acceleration_time
|
||||
? _eval_bezier_curve(acceleration_time)
|
||||
: current_block->cruise_rate;
|
||||
uint32_t acc_step_rate =
|
||||
acceleration_time < current_block->acceleration_time
|
||||
? _eval_bezier_curve(acceleration_time)
|
||||
: current_block->cruise_rate;
|
||||
#else
|
||||
acc_step_rate = STEP_MULTIPLY(acceleration_time, current_block->acceleration_rate) + current_block->initial_rate;
|
||||
NOMORE(acc_step_rate, current_block->nominal_rate);
|
||||
@@ -1707,40 +1690,9 @@ uint32_t Stepper::block_phase_isr() {
|
||||
acceleration_time += interval;
|
||||
|
||||
#if ENABLED(LIN_ADVANCE)
|
||||
if (LA_use_advance_lead) {
|
||||
// Fire ISR if final adv_rate is reached
|
||||
if (LA_steps && LA_isr_rate != current_block->advance_speed) nextAdvanceISR = 0;
|
||||
}
|
||||
else if (LA_steps) nextAdvanceISR = 0;
|
||||
#endif
|
||||
|
||||
// Update laser - Accelerating
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
if (laser.trap_en) {
|
||||
#if DISABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
if (current_block->laser.entry_per) {
|
||||
laser.acc_step_count -= step_events_completed - laser.last_step_count;
|
||||
laser.last_step_count = step_events_completed;
|
||||
|
||||
// Should be faster than a divide, since this should trip just once
|
||||
if (laser.acc_step_count < 0) {
|
||||
while (laser.acc_step_count < 0) {
|
||||
laser.acc_step_count += current_block->laser.entry_per;
|
||||
if (laser.cur_power < current_block->laser.power) laser.cur_power++;
|
||||
}
|
||||
cutter.set_ocr_power(laser.cur_power);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (laser.till_update)
|
||||
laser.till_update--;
|
||||
else {
|
||||
laser.till_update = LASER_POWER_INLINE_TRAPEZOID_CONT_PER;
|
||||
laser.cur_power = (current_block->laser.power * acc_step_rate) / current_block->nominal_rate;
|
||||
cutter.set_ocr_power(laser.cur_power); // Cycle efficiency is irrelevant it the last line was many cycles
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// Fire ISR if final adv_rate is reached
|
||||
if (LA_steps && (!LA_use_advance_lead || LA_isr_rate != current_block->advance_speed))
|
||||
initiateLA();
|
||||
#endif
|
||||
}
|
||||
// Are we in Deceleration phase ?
|
||||
@@ -1788,39 +1740,10 @@ uint32_t Stepper::block_phase_isr() {
|
||||
LA_isr_rate = current_block->advance_speed;
|
||||
}
|
||||
}
|
||||
else if (LA_steps) nextAdvanceISR = 0;
|
||||
#endif // LIN_ADVANCE
|
||||
|
||||
// Update laser - Decelerating
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
if (laser.trap_en) {
|
||||
#if DISABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
if (current_block->laser.exit_per) {
|
||||
laser.acc_step_count -= step_events_completed - laser.last_step_count;
|
||||
laser.last_step_count = step_events_completed;
|
||||
|
||||
// Should be faster than a divide, since this should trip just once
|
||||
if (laser.acc_step_count < 0) {
|
||||
while (laser.acc_step_count < 0) {
|
||||
laser.acc_step_count += current_block->laser.exit_per;
|
||||
if (laser.cur_power > current_block->laser.power_exit) laser.cur_power--;
|
||||
}
|
||||
cutter.set_ocr_power(laser.cur_power);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (laser.till_update)
|
||||
laser.till_update--;
|
||||
else {
|
||||
laser.till_update = LASER_POWER_INLINE_TRAPEZOID_CONT_PER;
|
||||
laser.cur_power = (current_block->laser.power * step_rate) / current_block->nominal_rate;
|
||||
cutter.set_ocr_power(laser.cur_power); // Cycle efficiency isn't relevant when the last line was many cycles
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if (LA_steps) initiateLA();
|
||||
#endif
|
||||
}
|
||||
// Must be in cruise phase otherwise
|
||||
// We must be in cruise phase otherwise
|
||||
else {
|
||||
|
||||
#if ENABLED(LIN_ADVANCE)
|
||||
@@ -1836,22 +1759,6 @@ uint32_t Stepper::block_phase_isr() {
|
||||
|
||||
// The timer interval is just the nominal value for the nominal speed
|
||||
interval = ticks_nominal;
|
||||
|
||||
// Update laser - Cruising
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
if (laser.trap_en) {
|
||||
if (!laser.cruise_set) {
|
||||
laser.cur_power = current_block->laser.power;
|
||||
cutter.set_ocr_power(laser.cur_power);
|
||||
laser.cruise_set = true;
|
||||
}
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
laser.till_update = LASER_POWER_INLINE_TRAPEZOID_CONT_PER;
|
||||
#else
|
||||
laser.last_step_count = step_events_completed;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1898,11 +1805,11 @@ uint32_t Stepper::block_phase_isr() {
|
||||
* If DeltaA == DeltaB, the movement is only in the 1st axis (X)
|
||||
*/
|
||||
#if EITHER(COREXY, COREXZ)
|
||||
#define X_CMP(A,B) ((A)==(B))
|
||||
#define X_CMP ==
|
||||
#else
|
||||
#define X_CMP(A,B) ((A)!=(B))
|
||||
#define X_CMP !=
|
||||
#endif
|
||||
#define X_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && X_CMP(D_(1),D_(2))) )
|
||||
#define X_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) X_CMP D_(2)) )
|
||||
#else
|
||||
#define X_MOVE_TEST !!current_block->steps.a
|
||||
#endif
|
||||
@@ -1916,11 +1823,11 @@ uint32_t Stepper::block_phase_isr() {
|
||||
* If DeltaA == -DeltaB, the movement is only in the 2nd axis (Y or Z)
|
||||
*/
|
||||
#if EITHER(COREYX, COREYZ)
|
||||
#define Y_CMP(A,B) ((A)==(B))
|
||||
#define Y_CMP ==
|
||||
#else
|
||||
#define Y_CMP(A,B) ((A)!=(B))
|
||||
#define Y_CMP !=
|
||||
#endif
|
||||
#define Y_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && Y_CMP(D_(1),D_(2))) )
|
||||
#define Y_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) Y_CMP D_(2)) )
|
||||
#else
|
||||
#define Y_MOVE_TEST !!current_block->steps.b
|
||||
#endif
|
||||
@@ -1934,11 +1841,11 @@ uint32_t Stepper::block_phase_isr() {
|
||||
* If DeltaA == -DeltaB, the movement is only in the 2nd axis (Z)
|
||||
*/
|
||||
#if EITHER(COREZX, COREZY)
|
||||
#define Z_CMP(A,B) ((A)==(B))
|
||||
#define Z_CMP ==
|
||||
#else
|
||||
#define Z_CMP(A,B) ((A)!=(B))
|
||||
#define Z_CMP !=
|
||||
#endif
|
||||
#define Z_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && Z_CMP(D_(1),D_(2))) )
|
||||
#define Z_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) Z_CMP D_(2)) )
|
||||
#else
|
||||
#define Z_MOVE_TEST !!current_block->steps.c
|
||||
#endif
|
||||
@@ -2031,39 +1938,6 @@ uint32_t Stepper::block_phase_isr() {
|
||||
set_directions();
|
||||
}
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
const uint8_t stat = current_block->laser.status;
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
laser.trap_en = (stat & 0x03) == 0x03;
|
||||
laser.cur_power = current_block->laser.power_entry; // RESET STATE
|
||||
laser.cruise_set = false;
|
||||
#if DISABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
laser.last_step_count = 0;
|
||||
laser.acc_step_count = current_block->laser.entry_per / 2;
|
||||
#else
|
||||
laser.till_update = 0;
|
||||
#endif
|
||||
// Always have PWM in this case
|
||||
if (TEST(stat, 0)) { // Planner controls the laser
|
||||
if (TEST(stat, 1)) // Laser is on
|
||||
cutter.set_ocr_power(laser.cur_power);
|
||||
else
|
||||
cutter.set_power(0);
|
||||
}
|
||||
#else
|
||||
if (TEST(stat, 0)) { // Planner controls the laser
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
if (TEST(stat, 1)) // Laser is on
|
||||
cutter.set_ocr_power(current_block->laser.power);
|
||||
else
|
||||
cutter.set_power(0);
|
||||
#else
|
||||
cutter.set_enabled(TEST(stat, 1));
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#endif // LASER_POWER_INLINE
|
||||
|
||||
// At this point, we must ensure the movement about to execute isn't
|
||||
// trying to force the head against a limit switch. If using interrupt-
|
||||
// driven change detection, and already against a limit then no call to
|
||||
@@ -2083,35 +1957,21 @@ uint32_t Stepper::block_phase_isr() {
|
||||
// Mark the time_nominal as not calculated yet
|
||||
ticks_nominal = -1;
|
||||
|
||||
#if DISABLED(S_CURVE_ACCELERATION)
|
||||
// Set as deceleration point the initial rate of the block
|
||||
acc_step_rate = current_block->initial_rate;
|
||||
#endif
|
||||
|
||||
#if ENABLED(S_CURVE_ACCELERATION)
|
||||
// Initialize the Bézier speed curve
|
||||
_calc_bezier_curve_coeffs(current_block->initial_rate, current_block->cruise_rate, current_block->acceleration_time_inverse);
|
||||
// We haven't started the 2nd half of the trapezoid
|
||||
bezier_2nd_half = false;
|
||||
#else
|
||||
// Set as deceleration point the initial rate of the block
|
||||
acc_step_rate = current_block->initial_rate;
|
||||
#endif
|
||||
|
||||
// Calculate the initial timer interval
|
||||
interval = calc_timer_interval(current_block->initial_rate, &steps_per_isr);
|
||||
}
|
||||
#if ENABLED(LASER_POWER_INLINE_CONTINUOUS)
|
||||
else { // No new block found; so apply inline laser parameters
|
||||
// This should mean ending file with 'M5 I' will stop the laser; thus the inline flag isn't needed
|
||||
const uint8_t stat = planner.settings.laser.status;
|
||||
if (TEST(stat, 0)) { // Planner controls the laser
|
||||
#if ENABLED(SPINDLE_LASER_PWM)
|
||||
if (TEST(stat, 1)) // Laser is on
|
||||
cutter.set_ocr_power(planner.settings.laser.power);
|
||||
else
|
||||
cutter.set_power(0);
|
||||
#else
|
||||
cutter.set_enabled(TEST(stat, 1));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Return the interval to wait
|
||||
|
||||
@@ -339,35 +339,23 @@ class Stepper {
|
||||
static uint32_t acc_step_rate; // needed for deceleration start point
|
||||
#endif
|
||||
|
||||
//
|
||||
// Exact steps at which an endstop was triggered
|
||||
//
|
||||
static xyz_long_t endstops_trigsteps;
|
||||
|
||||
//
|
||||
// Positions of stepper motors, in step units
|
||||
//
|
||||
static xyze_long_t count_position;
|
||||
|
||||
// Current stepper motor directions (+1 or -1)
|
||||
//
|
||||
// Current direction of stepper motors (+1 or -1)
|
||||
//
|
||||
static xyze_int8_t count_direction;
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
|
||||
typedef struct {
|
||||
bool trap_en; // Trapezoid needed flag (i.e., laser on, planner in control)
|
||||
uint8_t cur_power; // Current laser power
|
||||
bool cruise_set; // Power set up for cruising?
|
||||
|
||||
#if DISABLED(LASER_POWER_INLINE_TRAPEZOID_CONT)
|
||||
uint32_t last_step_count, // Step count from the last update
|
||||
acc_step_count; // Bresenham counter for laser accel/decel
|
||||
#else
|
||||
uint16_t till_update; // Countdown to the next update
|
||||
#endif
|
||||
} stepper_laser_t;
|
||||
|
||||
static stepper_laser_t laser;
|
||||
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
||||
// Initialize stepper hardware
|
||||
static void init();
|
||||
|
||||
|
||||
@@ -341,7 +341,7 @@ enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
|
||||
ptr[a] = p; return false;
|
||||
};
|
||||
} sp_helper;
|
||||
#define HW_SERIAL_BEGIN(A) do{ if (!sp_helper.began(TMCAxis::A, &A##_HARDWARE_SERIAL)) \
|
||||
#define HW_SERIAL_BEGIN(A) do{ if (sp_helper.began(TMCAxis::A, &A##_HARDWARE_SERIAL)) \
|
||||
A##_HARDWARE_SERIAL.begin(TMC_BAUD_RATE); }while(0)
|
||||
#if AXIS_HAS_UART(X)
|
||||
#ifdef X_HARDWARE_SERIAL
|
||||
|
||||
@@ -399,7 +399,7 @@ volatile bool Temperature::raw_temps_ready = false;
|
||||
const uint16_t watch_temp_period = GTV(WATCH_BED_TEMP_PERIOD, WATCH_TEMP_PERIOD);
|
||||
const uint8_t watch_temp_increase = GTV(WATCH_BED_TEMP_INCREASE, WATCH_TEMP_INCREASE);
|
||||
const float watch_temp_target = target - float(watch_temp_increase + GTV(TEMP_BED_HYSTERESIS, TEMP_HYSTERESIS) + 1);
|
||||
millis_t temp_change_ms = next_temp_ms + SEC_TO_MS(watch_temp_period);
|
||||
millis_t temp_change_ms = next_temp_ms + watch_temp_period * 1000UL;
|
||||
float next_watch_temp = 0.0;
|
||||
bool heated = false;
|
||||
#endif
|
||||
@@ -546,7 +546,7 @@ volatile bool Temperature::raw_temps_ready = false;
|
||||
if (!heated) { // If not yet reached target...
|
||||
if (current_temp > next_watch_temp) { // Over the watch temp?
|
||||
next_watch_temp = current_temp + watch_temp_increase; // - set the next temp to watch for
|
||||
temp_change_ms = ms + SEC_TO_MS(watch_temp_period); // - move the expiration timer up
|
||||
temp_change_ms = ms + watch_temp_period * 1000UL; // - move the expiration timer up
|
||||
if (current_temp > watch_temp_target) heated = true; // - Flag if target temperature reached
|
||||
}
|
||||
else if (ELAPSED(ms, temp_change_ms)) // Watch timer expired
|
||||
@@ -2051,7 +2051,7 @@ void Temperature::init() {
|
||||
#endif
|
||||
|
||||
if (current >= tr_target_temperature[heater_index] - hysteresis_degc) {
|
||||
sm.timer = millis() + SEC_TO_MS(period_seconds);
|
||||
sm.timer = millis() + period_seconds * 1000UL;
|
||||
break;
|
||||
}
|
||||
else if (PENDING(millis(), sm.timer)) break;
|
||||
@@ -3124,7 +3124,7 @@ void Temperature::tick() {
|
||||
millis_t residency_start_ms = 0;
|
||||
bool first_loop = true;
|
||||
// Loop until the temperature has stabilized
|
||||
#define TEMP_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + SEC_TO_MS(TEMP_RESIDENCY_TIME)))
|
||||
#define TEMP_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + (TEMP_RESIDENCY_TIME) * 1000UL))
|
||||
#else
|
||||
// Loop until the temperature is very close target
|
||||
#define TEMP_CONDITIONS (wants_to_cool ? isCoolingHotend(target_extruder) : isHeatingHotend(target_extruder))
|
||||
@@ -3160,7 +3160,7 @@ void Temperature::tick() {
|
||||
#if TEMP_RESIDENCY_TIME > 0
|
||||
SERIAL_ECHOPGM(" W:");
|
||||
if (residency_start_ms)
|
||||
SERIAL_ECHO(long((SEC_TO_MS(TEMP_RESIDENCY_TIME) - (now - residency_start_ms)) / 1000UL));
|
||||
SERIAL_ECHO(long((((TEMP_RESIDENCY_TIME) * 1000UL) - (now - residency_start_ms)) / 1000UL));
|
||||
else
|
||||
SERIAL_CHAR('?');
|
||||
#endif
|
||||
@@ -3185,7 +3185,7 @@ void Temperature::tick() {
|
||||
// Start the TEMP_RESIDENCY_TIME timer when we reach target temp for the first time.
|
||||
if (temp_diff < TEMP_WINDOW) {
|
||||
residency_start_ms = now;
|
||||
if (first_loop) residency_start_ms += SEC_TO_MS(TEMP_RESIDENCY_TIME);
|
||||
if (first_loop) residency_start_ms += (TEMP_RESIDENCY_TIME) * 1000UL;
|
||||
}
|
||||
}
|
||||
else if (temp_diff > TEMP_HYSTERESIS) {
|
||||
@@ -3247,7 +3247,7 @@ void Temperature::tick() {
|
||||
millis_t residency_start_ms = 0;
|
||||
bool first_loop = true;
|
||||
// Loop until the temperature has stabilized
|
||||
#define TEMP_BED_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + SEC_TO_MS(TEMP_BED_RESIDENCY_TIME)))
|
||||
#define TEMP_BED_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + (TEMP_BED_RESIDENCY_TIME) * 1000UL))
|
||||
#else
|
||||
// Loop until the temperature is very close target
|
||||
#define TEMP_BED_CONDITIONS (wants_to_cool ? isCoolingBed() : isHeatingBed())
|
||||
@@ -3284,7 +3284,7 @@ void Temperature::tick() {
|
||||
#if TEMP_BED_RESIDENCY_TIME > 0
|
||||
SERIAL_ECHOPGM(" W:");
|
||||
if (residency_start_ms)
|
||||
SERIAL_ECHO(long((SEC_TO_MS(TEMP_BED_RESIDENCY_TIME) - (now - residency_start_ms)) / 1000UL));
|
||||
SERIAL_ECHO(long((((TEMP_BED_RESIDENCY_TIME) * 1000UL) - (now - residency_start_ms)) / 1000UL));
|
||||
else
|
||||
SERIAL_CHAR('?');
|
||||
#endif
|
||||
@@ -3309,7 +3309,7 @@ void Temperature::tick() {
|
||||
// Start the TEMP_BED_RESIDENCY_TIME timer when we reach target temp for the first time.
|
||||
if (temp_diff < TEMP_BED_WINDOW) {
|
||||
residency_start_ms = now;
|
||||
if (first_loop) residency_start_ms += SEC_TO_MS(TEMP_BED_RESIDENCY_TIME);
|
||||
if (first_loop) residency_start_ms += (TEMP_BED_RESIDENCY_TIME) * 1000UL;
|
||||
}
|
||||
}
|
||||
else if (temp_diff > TEMP_BED_HYSTERESIS) {
|
||||
@@ -3373,7 +3373,7 @@ void Temperature::tick() {
|
||||
millis_t residency_start_ms = 0;
|
||||
bool first_loop = true;
|
||||
// Loop until the temperature has stabilized
|
||||
#define TEMP_CHAMBER_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + SEC_TO_MS(TEMP_CHAMBER_RESIDENCY_TIME)))
|
||||
#define TEMP_CHAMBER_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + (TEMP_CHAMBER_RESIDENCY_TIME) * 1000UL))
|
||||
#else
|
||||
// Loop until the temperature is very close target
|
||||
#define TEMP_CHAMBER_CONDITIONS (wants_to_cool ? isCoolingChamber() : isHeatingChamber())
|
||||
@@ -3405,7 +3405,7 @@ void Temperature::tick() {
|
||||
#if TEMP_CHAMBER_RESIDENCY_TIME > 0
|
||||
SERIAL_ECHOPGM(" W:");
|
||||
if (residency_start_ms)
|
||||
SERIAL_ECHO(long((SEC_TO_MS(TEMP_CHAMBER_RESIDENCY_TIME) - (now - residency_start_ms)) / 1000UL));
|
||||
SERIAL_ECHO(long((((TEMP_CHAMBER_RESIDENCY_TIME) * 1000UL) - (now - residency_start_ms)) / 1000UL));
|
||||
else
|
||||
SERIAL_CHAR('?');
|
||||
#endif
|
||||
@@ -3425,7 +3425,7 @@ void Temperature::tick() {
|
||||
// Start the TEMP_CHAMBER_RESIDENCY_TIME timer when we reach target temp for the first time.
|
||||
if (temp_diff < TEMP_CHAMBER_WINDOW) {
|
||||
residency_start_ms = now;
|
||||
if (first_loop) residency_start_ms += SEC_TO_MS(TEMP_CHAMBER_RESIDENCY_TIME);
|
||||
if (first_loop) residency_start_ms += (TEMP_CHAMBER_RESIDENCY_TIME) * 1000UL;
|
||||
}
|
||||
}
|
||||
else if (temp_diff > TEMP_CHAMBER_HYSTERESIS) {
|
||||
|
||||
@@ -241,7 +241,7 @@ struct HeaterWatch {
|
||||
const int16_t newtarget = curr + INCREASE;
|
||||
if (newtarget < tgt - HYSTERESIS - 1) {
|
||||
target = newtarget;
|
||||
next_ms = millis() + SEC_TO_MS(PERIOD);
|
||||
next_ms = millis() + PERIOD * 1000UL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Executable → Regular
@@ -821,7 +821,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
|
||||
if (new_tool >= EXTRUDERS)
|
||||
return invalid_extruder_error(new_tool);
|
||||
|
||||
if (!no_move && !homing_needed()) {
|
||||
if (!no_move && homing_needed()) {
|
||||
no_move = true;
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("No move (not homed)");
|
||||
}
|
||||
@@ -1073,7 +1073,11 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
|
||||
#endif
|
||||
|
||||
#ifdef EVENT_GCODE_AFTER_TOOLCHANGE
|
||||
if (!no_move && TERN1(DUAL_X_CARRIAGE, dual_x_carriage_mode == DXC_AUTO_PARK_MODE))
|
||||
if (!no_move
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
&& dual_x_carriage_mode == DXC_AUTO_PARK_MODE
|
||||
#endif
|
||||
)
|
||||
gcode.process_subcommands_now_P(PSTR(EVENT_GCODE_AFTER_TOOLCHANGE));
|
||||
#endif
|
||||
|
||||
|
||||
@@ -26,10 +26,8 @@
|
||||
//
|
||||
// EEPROM
|
||||
//
|
||||
#if NONE(FLASH_EEPROM_EMULATION, SDCARD_EEPROM_EMULATION)
|
||||
#define FLASH_EEPROM_EMULATION
|
||||
//#define SDCARD_EEPROM_EMULATION
|
||||
#endif
|
||||
#define FLASH_EEPROM_EMULATION
|
||||
//#define SDCARD_EEPROM_EMULATION
|
||||
|
||||
/**
|
||||
* Trinamic Stallguard pins
|
||||
|
||||
@@ -454,7 +454,7 @@
|
||||
#elif MB(ARCHIM1)
|
||||
#include "sam/pins_ARCHIM1.h" // SAM3X8E env:DUE env:DUE_debug
|
||||
#elif MB(ARCHIM2)
|
||||
#include "sam/pins_ARCHIM2.h" // SAM3X8E env:DUE_archim env:DUE_archim_debug
|
||||
#include "sam/pins_ARCHIM2.h" // SAM3X8E env:DUE env:DUE_debug
|
||||
#elif MB(ALLIGATOR)
|
||||
#include "sam/pins_ALLIGATOR_R2.h" // SAM3X8E env:DUE env:DUE_debug
|
||||
#elif MB(ADSK)
|
||||
|
||||
@@ -378,42 +378,6 @@ void CardReader::mount() {
|
||||
ui.refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle SD card events
|
||||
*/
|
||||
#if MB(FYSETC_CHEETAH)
|
||||
#include "../module/stepper.h"
|
||||
#endif
|
||||
|
||||
void CardReader::manage_media() {
|
||||
static uint8_t prev_stat = TERN(INIT_SDCARD_ON_BOOT, 2, 0);
|
||||
uint8_t stat = uint8_t(IS_SD_INSERTED());
|
||||
if (stat != prev_stat && ui.detected()) {
|
||||
|
||||
uint8_t old_stat = prev_stat;
|
||||
prev_stat = stat; // Change now to prevent re-entry
|
||||
|
||||
if (stat) { // Media Inserted
|
||||
safe_delay(500); // Some boards need a delay to get settled
|
||||
mount(); // Try to mount the media
|
||||
#if MB(FYSETC_CHEETAH)
|
||||
reset_stepper_drivers(); // Workaround for Cheetah bug
|
||||
#endif
|
||||
if (!isMounted()) stat = 0; // Not mounted?
|
||||
}
|
||||
else {
|
||||
#if PIN_EXISTS(SD_DETECT)
|
||||
release(); // Card is released
|
||||
#endif
|
||||
}
|
||||
|
||||
ui.media_changed(old_stat, stat); // Update the UI
|
||||
|
||||
if (stat && old_stat == 2) // First mount?
|
||||
beginautostart(); // Look for autostart files soon
|
||||
}
|
||||
}
|
||||
|
||||
void CardReader::release() {
|
||||
endFilePrint();
|
||||
flag.mounted = false;
|
||||
|
||||
@@ -73,9 +73,6 @@ public:
|
||||
static inline bool isMounted() { return flag.mounted; }
|
||||
static void ls();
|
||||
|
||||
// Handle media insert/remove
|
||||
static void manage_media();
|
||||
|
||||
// SD Card Logging
|
||||
static void openLogFile(char * const path);
|
||||
static void write_command(char * const buf);
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# Marlin 3D Printer Firmware
|
||||
# Marlin 3D Printer Firmware
|
||||
|
||||
[](https://travis-ci.org/MarlinFirmware/Marlin)
|
||||

|
||||

|
||||

|
||||
[](https://github.com/MarlinFirmware/Marlin/actions)
|
||||
|
||||
<img align="top" width=175 src="buildroot/share/pixmaps/logo/marlin-250.png" />
|
||||
<img align="right" width=175 src="buildroot/share/pixmaps/logo/marlin-250.png" />
|
||||
|
||||
Additional documentation can be found at the [Marlin Home Page](http://marlinfw.org/).
|
||||
Please test this firmware and let us know if it misbehaves in any way. Volunteers are standing by!
|
||||
@@ -30,27 +30,66 @@ Marlin 2.0 introduces a layer of abstraction so that all the existing high-level
|
||||
|
||||
### Current HALs
|
||||
|
||||
name|processor|speed|flash|sram|logic|fpu
|
||||
#### AVR (8-bit)
|
||||
|
||||
board|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Arduino AVR](https://www.arduino.cc/)|ATmega, ATTiny, etc.|16-20MHz|64-256k|2-16k|5V|no
|
||||
[Teensy++ 2.0](http://www.microchip.com/wwwproducts/en/AT90USB1286)|[AT90USB1286](http://www.microchip.com/wwwproducts/en/AT90USB1286)|16MHz|128k|8k|5V|no
|
||||
[Arduino STM32](https://github.com/rogerclarkmelbourne/Arduino_STM32)|[STM32F1](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html) ARM-Cortex M3|72MHz|256-512k|48-64k|3.3V|no
|
||||
[Due](https://www.arduino.cc/en/Guide/ArduinoDue), [RAMPS-FD](http://www.reprap.org/wiki/RAMPS-FD), etc.|[SAM3X8E ARM-Cortex M3](http://www.microchip.com/wwwproducts/en/ATsam3x8e)|84MHz|512k|64+32k|3.3V|no
|
||||
|
||||
#### DUE
|
||||
|
||||
boards|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Arduino Due](https://www.arduino.cc/en/Guide/ArduinoDue), [RAMPS-FD](http://www.reprap.org/wiki/RAMPS-FD), etc.|[SAM3X8E ARM-Cortex M3](http://www.microchip.com/wwwproducts/en/ATsam3x8e)|84MHz|512k|64+32k|3.3V|no
|
||||
|
||||
#### ESP32
|
||||
|
||||
board|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)|Tensilica Xtensa LX6|320MHz|---|---|3.3V|---
|
||||
|
||||
#### LPC1768 / LPC1769
|
||||
|
||||
boards|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Re-ARM](https://www.kickstarter.com/projects/1245051645/re-arm-for-ramps-simple-32-bit-upgrade)|[LPC1768 ARM-Cortex M3](http://www.nxp.com/products/microcontrollers-and-processors/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc1700-cortex-m3/512kb-flash-64kb-sram-ethernet-usb-lqfp100-package:LPC1768FBD100)|100MHz|512k|32+16+16k|3.3-5V|no
|
||||
[MKS SBASE](http://forums.reprap.org/read.php?13,499322)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no
|
||||
[Azteeg X5 GT](https://www.panucatt.com/azteeg_X5_GT_reprap_3d_printer_controller_p/ax5gt.htm)|LPC1769 ARM-Cortex M3|120MHz|512k|32+16+16k|3.3-5V|no
|
||||
[Selena Compact](https://github.com/Ales2-k/Selena)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no
|
||||
[Teensy 3.5](https://www.pjrc.com/store/teensy35.html)|ARM-Cortex M4|120MHz|512k|192k|3.3-5V|yes
|
||||
[Teensy 3.6](https://www.pjrc.com/store/teensy36.html)|ARM-Cortex M4|180MHz|1M|256k|3.3V|yes
|
||||
|
||||
### HALs in Development
|
||||
|
||||
name|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[STEVAL-3DP001V1](http://www.st.com/en/evaluation-tools/steval-3dp001v1.html)|[STM32F401VE Arm-Cortex M4](http://www.st.com/en/microcontrollers/stm32f401ve.html)|84MHz|512k|64+32k|3.3-5V|yes
|
||||
[Azteeg X5 GT](https://www.panucatt.com/azteeg_X5_GT_reprap_3d_printer_controller_p/ax5gt.htm)|LPC1769 ARM-Cortex M3|120MHz|512k|32+16+16k|3.3-5V|no
|
||||
[Smoothieboard](http://reprap.org/wiki/Smoothieboard)|LPC1769 ARM-Cortex M3|120MHz|512k|64k|3.3-5V|no
|
||||
|
||||
#### SAMD51
|
||||
|
||||
boards|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Adafruit Grand Central M4](https://www.adafruit.com/product/4064)|[SAMD51P20A ARM-Cortex M4](https://www.microchip.com/wwwproducts/en/ATSAMD51P20A)|120MHz|1M|256k|3.3V|yes
|
||||
|
||||
#### STM32F1
|
||||
|
||||
boards|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Arduino STM32](https://github.com/rogerclarkmelbourne/Arduino_STM32)|[STM32F1](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html) ARM-Cortex M3|72MHz|256-512k|48-64k|3.3V|no
|
||||
[STEVAL-3DP001V1](http://www.st.com/en/evaluation-tools/steval-3dp001v1.html)|[STM32F401VE Arm-Cortex M4](http://www.st.com/en/microcontrollers/stm32f401ve.html)|84MHz|512k|64+32k|3.3-5V|yes
|
||||
|
||||
#### Teensy++ 2.0
|
||||
|
||||
boards|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Teensy++ 2.0](http://www.microchip.com/wwwproducts/en/AT90USB1286)|[AT90USB1286](http://www.microchip.com/wwwproducts/en/AT90USB1286)|16MHz|128k|8k|5V|no
|
||||
|
||||
#### Teensy 3.1 / 3.2
|
||||
|
||||
boards|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Teensy 3.2](https://www.pjrc.com/store/teensy32.html)|[MK20DX256VLH7](https://www.mouser.com/ProductDetail/NXP-Freescale/MK20DX256VLH7) ARM-Cortex M4|72MHz|256k|32k|3.3V-5V|yes
|
||||
|
||||
#### Teensy 3.5 / 3.6
|
||||
|
||||
boards|processor|speed|flash|sram|logic|fpu
|
||||
----|---------|-----|-----|----|-----|---
|
||||
[Teensy 3.5](https://www.pjrc.com/store/teensy35.html)|[MK64FX512VMD12](https://www.mouser.com/ProductDetail/NXP-Freescale/MK64FX512VMD12) ARM-Cortex M4|120MHz|512k|192k|3.3-5V|yes
|
||||
[Teensy 3.6](https://www.pjrc.com/store/teensy36.html)|[MK66FX1M0VMD18](https://www.mouser.com/ProductDetail/NXP-Freescale/MK66FX1M0VMD18) ARM-Cortex M4|180MHz|1M|256k|3.3V|yes
|
||||
|
||||
## Submitting Patches
|
||||
|
||||
Proposed patches should be submitted as a Pull Request against the ([bugfix-2.0.x](https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x)) branch.
|
||||
@@ -65,10 +104,10 @@ Proposed patches should be submitted as a Pull Request against the ([bugfix-2.0.
|
||||
|
||||
The current Marlin dev team consists of:
|
||||
|
||||
- Scott Lahteine [[@thinkyhead](https://github.com/thinkyhead)] - USA [](https://flattr.com/submit/auto?user_id=thinkyhead&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software)
|
||||
- Scott Lahteine [[@thinkyhead](https://github.com/thinkyhead)] - USA [Donate](http://www.thinkyhead.com/donate-to-marlin) / Flattr: [](https://flattr.com/submit/auto?user_id=thinkyhead&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software)
|
||||
- Roxanne Neufeld [[@Roxy-3D](https://github.com/Roxy-3D)] - USA
|
||||
- Bob Kuhn [[@Bob-the-Kuhn](https://github.com/Bob-the-Kuhn)] - USA
|
||||
- Chris Pepper [[@p3p](https://github.com/p3p)] - UK
|
||||
- Bob Kuhn [[@Bob-the-Kuhn](https://github.com/Bob-the-Kuhn)] - USA
|
||||
- João Brazio [[@jbrazio](https://github.com/jbrazio)] - Portugal
|
||||
- Erik van der Zalm [[@ErikZalm](https://github.com/ErikZalm)] - Netherlands [](https://flattr.com/submit/auto?user_id=ErikZalm&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software)
|
||||
|
||||
|
||||
Executable → Regular
@@ -15,22 +15,22 @@
|
||||
]
|
||||
],
|
||||
"ldscript": "stm32f407xg.ld",
|
||||
"mcu": "stm32f407vgt6",
|
||||
"mcu": "stm32f407vet6",
|
||||
"variant": "BIGTREE_BTT002"
|
||||
},
|
||||
"debug": {
|
||||
"jlink_device": "STM32F407VG",
|
||||
"jlink_device": "STM32F407VE",
|
||||
"openocd_target": "stm32f4x",
|
||||
"svd_path": "STM32F40x.svd"
|
||||
},
|
||||
"frameworks": [
|
||||
"arduino"
|
||||
],
|
||||
"name": "STM32F407VG (192k RAM. 1024k Flash)",
|
||||
"name": "STM32F407VE (192k RAM. 512k Flash)",
|
||||
"upload": {
|
||||
"disable_flushing": false,
|
||||
"maximum_ram_size": 131072,
|
||||
"maximum_size": 1048576,
|
||||
"maximum_size": 524288,
|
||||
"protocol": "stlink",
|
||||
"protocols": [
|
||||
"stlink",
|
||||
@@ -41,6 +41,6 @@
|
||||
"use_1200bps_touch": false,
|
||||
"wait_for_upload_port": false
|
||||
},
|
||||
"url": "http://www.st.com/en/microcontrollers/stm32f407vg.html",
|
||||
"url": "http://www.st.com/en/microcontrollers/stm32f407ve.html",
|
||||
"vendor": "Generic"
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ if platform.get_package_dir("tool-stm32duino") != None:
|
||||
|
||||
env.Replace(
|
||||
UPLOADER=UPLOAD_TOOL,
|
||||
UPLOADCMD=expandvars(UPLOAD_TOOL + " -v -i rts,-dtr,dtr -R -b 115200 -g 0x8000000 -w \"" + join("$BUILD_DIR","${PROGNAME}.hex")+"\"" + " $UPLOAD_PORT")
|
||||
UPLOADCMD=expandvars(UPLOAD_TOOL + " -v -i rts,-dtr,dtr $UPLOAD_PORT -R -w \"" + join("$BUILD_DIR","${PROGNAME}.hex")+"\"")
|
||||
)
|
||||
|
||||
# Python callback
|
||||
|
||||
@@ -195,7 +195,7 @@ extern "C" {
|
||||
#define PIN_SERIAL2_RX PD6
|
||||
#define PIN_SERIAL2_TX PD5
|
||||
#else
|
||||
#error "Invalid setting for SERIAL_UART_INSTANCE."
|
||||
#error'Invalid setting for SERIAL_UART_INSTANCE'
|
||||
#endif
|
||||
|
||||
// Timer Definitions
|
||||
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
@@ -67,11 +67,11 @@ if [[ $BRANCH == $TARG ]]; then
|
||||
# Allow working directly with the main fork
|
||||
echo
|
||||
echo -n "Pushing to origin/$TARG... "
|
||||
git push origin HEAD:$TARG
|
||||
git push -f origin
|
||||
|
||||
echo
|
||||
echo -n "Pushing to upstream/$TARG... "
|
||||
git push upstream HEAD:$TARG
|
||||
git push -f upstream
|
||||
|
||||
else
|
||||
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
//
|
||||
// Formatter script for pins_MYPINS.h files
|
||||
//
|
||||
// Usage: mffmt [infile] [outfile]
|
||||
//
|
||||
// With no parameters convert STDIN to STDOUT
|
||||
//
|
||||
|
||||
const fs = require("fs");
|
||||
|
||||
// String lpad / rpad
|
||||
String.prototype.lpad = function(len, chr) {
|
||||
if (!len) return this;
|
||||
if (chr === undefined) chr = ' ';
|
||||
var s = this+'', need = len - s.length;
|
||||
if (need > 0) s = new Array(need+1).join(chr) + s;
|
||||
return s;
|
||||
};
|
||||
|
||||
String.prototype.rpad = function(len, chr) {
|
||||
if (!len) return this;
|
||||
if (chr === undefined) chr = ' ';
|
||||
var s = this+'', need = len - s.length;
|
||||
if (need > 0) s += new Array(need+1).join(chr);
|
||||
return s;
|
||||
};
|
||||
|
||||
const mpatt = [ '-?\\d+', 'P[A-I]\\d+', 'P\\d_\\d+' ],
|
||||
definePatt = new RegExp(`^\\s*(//)?#define\\s+[A-Z_][A-Z0-9_]+\\s+(${mpatt[0]}|${mpatt[1]}|${mpatt[2]})\\s*(//.*)?$`, 'gm'),
|
||||
ppad = [ 3, 4, 5 ],
|
||||
col_comment = 50,
|
||||
col_value_rj = col_comment - 3;
|
||||
|
||||
var mexpr = [];
|
||||
for (let m of mpatt) mexpr.push(new RegExp('^' + m + '$'));
|
||||
|
||||
const argv = process.argv.slice(2), argc = argv.length;
|
||||
|
||||
var src_file = 0, src_name = 'STDIN', dst_file;
|
||||
if (argc > 0) {
|
||||
src_file = src_name = argv[0];
|
||||
dst_file = argv[argc > 1 ? 1 : 0];
|
||||
}
|
||||
|
||||
// Read from file or STDIN until it terminates
|
||||
const filtered = process_text(fs.readFileSync(src_file).toString());
|
||||
if (dst_file)
|
||||
fs.writeFileSync(dst_file, filtered);
|
||||
else
|
||||
console.log(filtered);
|
||||
|
||||
// Find the pin pattern so non-pin defines can be skipped
|
||||
function get_pin_pattern(txt) {
|
||||
var r, m = 0, match_count = [ 0, 0, 0 ];
|
||||
definePatt.lastIndex = 0;
|
||||
while ((r = definePatt.exec(txt)) !== null) {
|
||||
let ind = -1;
|
||||
if (mexpr.some((p) => {
|
||||
ind++;
|
||||
const didmatch = r[2].match(p);
|
||||
return r[2].match(p);
|
||||
}) ) {
|
||||
const m = ++match_count[ind];
|
||||
if (m >= 10) {
|
||||
return { match: mpatt[ind], pad:ppad[ind] };
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function process_text(txt) {
|
||||
if (!txt.length) return '(no text)';
|
||||
const patt = get_pin_pattern(txt);
|
||||
if (!patt) return txt;
|
||||
const pindefPatt = new RegExp(`^(\\s*(//)?#define)\\s+([A-Z_][A-Z0-9_]+)\\s+(${patt.match})\\s*(//.*)?$`),
|
||||
noPinPatt = new RegExp(`^(\\s*(//)?#define)\\s+([A-Z_][A-Z0-9_]+)\\s+(-1)\\s*(//.*)?$`),
|
||||
skipPatt = new RegExp('^(\\s*(//)?#define)\\s+(AT90USB|USBCON|BOARD_.+|.+_MACHINE_NAME|.+_SERIAL)\\s+(.+)\\s*(//.*)?$'),
|
||||
aliasPatt = new RegExp('^(\\s*(//)?#define)\\s+([A-Z_][A-Z0-9_]+)\\s+([A-Z_][A-Z0-9_()]+)\\s*(//.*)?$'),
|
||||
switchPatt = new RegExp('^(\\s*(//)?#define)\\s+([A-Z_][A-Z0-9_]+)\\s*(//.*)?$'),
|
||||
undefPatt = new RegExp('^(\\s*(//)?#undef)\\s+([A-Z_][A-Z0-9_]+)\\s*(//.*)?$'),
|
||||
defPatt = new RegExp('^(\\s*(//)?#define)\\s+([A-Z_][A-Z0-9_]+)\\s+(\\w+)\\s*(//.*)?$'),
|
||||
condPatt = new RegExp('^(\\s*(//)?#(if|ifn?def|else|elif)(\\s+\\S+)*)\\s+(//.*)$'),
|
||||
commPatt = new RegExp('^\\s{20,}(//.*)?$');
|
||||
const col_value_lj = col_comment - patt.pad - 2;
|
||||
var r, out = '', check_comment_next = false;
|
||||
txt.split('\n').forEach((line) => {
|
||||
if (check_comment_next)
|
||||
check_comment_next = ((r = commPatt.exec(line)) !== null);
|
||||
|
||||
if (check_comment_next)
|
||||
// Comments in column 45
|
||||
line = ''.rpad(col_comment) + r[1];
|
||||
|
||||
else if ((r = pindefPatt.exec(line)) !== null) {
|
||||
//
|
||||
// #define MY_PIN [pin]
|
||||
//
|
||||
const pinnum = r[4].charAt(0) == 'P' ? r[4] : r[4].lpad(patt.pad);
|
||||
line = r[1] + ' ' + r[3];
|
||||
line = line.rpad(col_value_lj) + pinnum;
|
||||
if (r[5]) line = line.rpad(col_comment) + r[5];
|
||||
}
|
||||
else if ((r = noPinPatt.exec(line)) !== null) {
|
||||
//
|
||||
// #define MY_PIN -1
|
||||
//
|
||||
line = r[1] + ' ' + r[3];
|
||||
line = line.rpad(col_value_lj) + '-1';
|
||||
if (r[5]) line = line.rpad(col_comment) + r[5];
|
||||
}
|
||||
else if ((r = skipPatt.exec(line)) !== null) {
|
||||
}
|
||||
else if ((r = aliasPatt.exec(line)) !== null) {
|
||||
line = r[1] + ' ' + r[3];
|
||||
line += r[4].lpad(col_value_rj + 1 - line.length);
|
||||
if (r[5]) line = line.rpad(col_comment) + r[5];
|
||||
}
|
||||
else if ((r = switchPatt.exec(line)) !== null) {
|
||||
line = r[1] + ' ' + r[3];
|
||||
if (r[4]) line = line.rpad(col_comment) + r[4];
|
||||
check_comment_next = true;
|
||||
}
|
||||
else if ((r = defPatt.exec(line)) !== null) {
|
||||
line = r[1] + ' ' + r[3] + ' ' + r[4];
|
||||
if (r[5]) line = line.rpad(col_comment) + r[5];
|
||||
}
|
||||
else if ((r = undefPatt.exec(line)) !== null) {
|
||||
line = r[1] + ' ' + r[3];
|
||||
if (r[4]) line = line.rpad(col_comment) + r[4];
|
||||
}
|
||||
else if ((r = condPatt.exec(line)) !== null) {
|
||||
line = r[1].rpad(col_comment) + r[5];
|
||||
check_comment_next = true;
|
||||
}
|
||||
out += line + '\n';
|
||||
});
|
||||
return out.replace(/\n\n+/g, '\n\n').replace(/\n\n$/g, '\n');
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Build tests for STM32F407VGT6 BigTreeTech BTT002 V1.0
|
||||
# Build tests for STM32F407VET6 BigTreeTech BTT002
|
||||
#
|
||||
|
||||
# exit on first failure
|
||||
|
||||
@@ -12,6 +12,43 @@ set -e
|
||||
#restore_configs
|
||||
#exec_test $1 $2 "Default Configuration"
|
||||
|
||||
#
|
||||
# Test 2 extruders (one MAX6675) and heated bed on basic RAMPS 1.4
|
||||
# Test a "Fix Mounted" Probe with Safe Homing, some arc options,
|
||||
# linear bed leveling, M48, leveling debug, and firmware retraction.
|
||||
#
|
||||
restore_configs
|
||||
opt_set MOTHERBOARD BOARD_RAMPS_14_EEB
|
||||
opt_set EXTRUDERS 2
|
||||
opt_set TEMP_SENSOR_0 -2
|
||||
opt_set TEMP_SENSOR_1 1
|
||||
opt_set TEMP_SENSOR_BED 2
|
||||
opt_set TEMP_SENSOR_PROBE 1
|
||||
opt_add TEMP_PROBE_PIN 12
|
||||
opt_set TEMP_SENSOR_CHAMBER 3
|
||||
opt_add HEATER_CHAMBER_PIN 45
|
||||
opt_set GRID_MAX_POINTS_X 16
|
||||
opt_set FANMUX0_PIN 53
|
||||
opt_disable USE_WATCHDOG
|
||||
opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \
|
||||
FIX_MOUNTED_PROBE Z_SAFE_HOMING CODEPENDENT_XY_HOMING PIDTEMPBED \
|
||||
PROBING_HEATERS_OFF PROBING_FANS_OFF PROBING_STEPPERS_OFF WAIT_FOR_BED_HEATER \
|
||||
EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \
|
||||
BLINKM PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \
|
||||
NEOPIXEL_LED CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CASE_LIGHT_MENU \
|
||||
PID_PARAMS_PER_HOTEND PID_AUTOTUNE_MENU PID_EDIT_MENU LCD_SHOW_E_TOTAL \
|
||||
PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 LEVEL_BED_CORNERS \
|
||||
NOZZLE_PARK_FEATURE FILAMENT_RUNOUT_SENSOR FILAMENT_RUNOUT_DISTANCE_MM \
|
||||
ADVANCED_PAUSE_FEATURE FILAMENT_LOAD_UNLOAD_GCODES FILAMENT_UNLOAD_ALL_EXTRUDERS \
|
||||
AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DISTINCT_E_FACTORS \
|
||||
SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE \
|
||||
BACKLASH_COMPENSATION BACKLASH_GCODE BAUD_RATE_GCODE BEZIER_CURVE_SUPPORT \
|
||||
FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
|
||||
PSU_CONTROL AUTO_POWER_CONTROL POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE \
|
||||
SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER LIN_ADVANCE EXTRA_LIN_ADVANCE_K \
|
||||
HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL
|
||||
exec_test $1 $2 "RAMPS | EXTRUDERS 2 | CHAR LCD + SD | FIX Probe | ABL-Linear | Advanced Pause | PLR | LEDs ..."
|
||||
|
||||
#
|
||||
# Test a probeless build of AUTO_BED_LEVELING_UBL, with lots of extruders
|
||||
#
|
||||
@@ -78,23 +115,21 @@ exec_test $1 $2 "RAMPS | ZONESTAR_LCD | MMU2 | Servo Probe | ABL 3-Pt | Debug Le
|
||||
# Test MINIRAMBO with PWM_MOTOR_CURRENT and many features
|
||||
#
|
||||
restore_configs
|
||||
opt_set MOTHERBOARD BOARD_MEGACONTROLLER
|
||||
opt_set MOTHERBOARD BOARD_MINIRAMBO
|
||||
opt_set LCD_LANGUAGE de
|
||||
opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT \
|
||||
MINIPANEL SDSUPPORT PCA9632 LCD_INFO_MENU \
|
||||
ULTIMAKERCONTROLLER SDSUPPORT PCA9632 LCD_INFO_MENU \
|
||||
AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY LCD_BED_LEVELING G26_MESH_VALIDATION MESH_EDIT_MENU \
|
||||
LIN_ADVANCE EXTRA_LIN_ADVANCE_K \
|
||||
LIN_ADVANCE EXTRA_LIN_ADVANCE_K \
|
||||
INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT EXPERIMENTAL_I2CBUS M100_FREE_MEMORY_WATCHER \
|
||||
NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE \
|
||||
ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE ADVANCED_PAUSE_CONTINUOUS_PURGE FILAMENT_LOAD_UNLOAD_GCODES \
|
||||
PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 M114_DETAIL \
|
||||
USE_CONTROLLER_FAN CONTROLLER_FAN_EDITABLE
|
||||
opt_set CONTROLLERFAN_SPEED_IDLE 128
|
||||
PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 M114_DETAIL
|
||||
opt_add M100_FREE_MEMORY_DUMPER
|
||||
opt_add M100_FREE_MEMORY_CORRUPTOR
|
||||
opt_set PWM_MOTOR_CURRENT "{ 1300, 1300, 1250 }"
|
||||
opt_set I2C_SLAVE_ADDRESS 63
|
||||
exec_test $1 $2 "MEGACONTROLLER | Ultimaker LCD | M100 | PWM_MOTOR_CURRENT | PRINTCOUNTER | Advanced Pause ..."
|
||||
exec_test $1 $2 "MINIRAMBO | Ultimaker LCD | M100 | PWM_MOTOR_CURRENT | PRINTCOUNTER | Advanced Pause ..."
|
||||
|
||||
#
|
||||
# Mixing Extruder with 5 steppers, Cyrillic
|
||||
|
||||
@@ -33,40 +33,5 @@ opt_enable USE_XMAX_PLUG USE_YMAX_PLUG USE_ZMAX_PLUG \
|
||||
opt_disable MIN_SOFTWARE_ENDSTOP_Z MAX_SOFTWARE_ENDSTOPS
|
||||
exec_test $1 $2 "Rambo CNC Configuration"
|
||||
|
||||
#
|
||||
# Lots of options - Formerly the first Mega2560 test
|
||||
#
|
||||
restore_configs
|
||||
opt_set MOTHERBOARD BOARD_RAMBO
|
||||
opt_set EXTRUDERS 2
|
||||
opt_set TEMP_SENSOR_0 -2
|
||||
opt_set TEMP_SENSOR_1 1
|
||||
opt_set TEMP_SENSOR_BED 2
|
||||
opt_set TEMP_SENSOR_PROBE 1
|
||||
opt_add TEMP_PROBE_PIN 12
|
||||
opt_set TEMP_SENSOR_CHAMBER 3
|
||||
opt_add HEATER_CHAMBER_PIN 45
|
||||
opt_set GRID_MAX_POINTS_X 16
|
||||
opt_set FANMUX0_PIN 53
|
||||
opt_disable USE_WATCHDOG
|
||||
opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \
|
||||
FIX_MOUNTED_PROBE Z_SAFE_HOMING CODEPENDENT_XY_HOMING PIDTEMPBED PROBE_TEMP_COMPENSATION \
|
||||
PROBING_HEATERS_OFF PROBING_FANS_OFF PROBING_STEPPERS_OFF WAIT_FOR_BED_HEATER \
|
||||
EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \
|
||||
BLINKM PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \
|
||||
NEOPIXEL_LED CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CASE_LIGHT_MENU \
|
||||
PID_PARAMS_PER_HOTEND PID_AUTOTUNE_MENU PID_EDIT_MENU LCD_SHOW_E_TOTAL \
|
||||
PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 LEVEL_BED_CORNERS \
|
||||
NOZZLE_PARK_FEATURE FILAMENT_RUNOUT_SENSOR FILAMENT_RUNOUT_DISTANCE_MM \
|
||||
ADVANCED_PAUSE_FEATURE FILAMENT_LOAD_UNLOAD_GCODES FILAMENT_UNLOAD_ALL_EXTRUDERS \
|
||||
AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DISTINCT_E_FACTORS \
|
||||
SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE \
|
||||
BACKLASH_COMPENSATION BACKLASH_GCODE BAUD_RATE_GCODE BEZIER_CURVE_SUPPORT \
|
||||
FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
|
||||
PSU_CONTROL AUTO_POWER_CONTROL POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE \
|
||||
SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER LIN_ADVANCE EXTRA_LIN_ADVANCE_K \
|
||||
HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL
|
||||
exec_test $1 $2 "RAMBO | EXTRUDERS 2 | CHAR LCD + SD | FIX Probe | ABL-Linear | Advanced Pause | PLR | LEDs ..."
|
||||
|
||||
# clean up
|
||||
restore_configs
|
||||
|
||||
Executable → Regular
@@ -0,0 +1,180 @@
|
||||
/* Linker script for mbed LPC1768 */
|
||||
MEMORY
|
||||
{
|
||||
//FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K
|
||||
FLASH (rx) : ORIGIN = 16K, LENGTH = (512K - 16K)
|
||||
RAM (rwx) : ORIGIN = 0x100000C8, LENGTH = (32K - 0xC8)
|
||||
|
||||
USB_RAM(rwx) : ORIGIN = 0x2007C000, LENGTH = 16K
|
||||
ETH_RAM(rwx) : ORIGIN = 0x20080000, LENGTH = 16K
|
||||
}
|
||||
|
||||
/* Linker script to place sections and symbol values. Should be used together
|
||||
* with other linker script that defines memory regions FLASH and RAM.
|
||||
* It references following symbols, which must be defined in code:
|
||||
* Reset_Handler : Entry of reset handler
|
||||
*
|
||||
* It defines following symbols, which code can use without definition:
|
||||
* __exidx_start
|
||||
* __exidx_end
|
||||
* __etext
|
||||
* __data_start__
|
||||
* __preinit_array_start
|
||||
* __preinit_array_end
|
||||
* __init_array_start
|
||||
* __init_array_end
|
||||
* __fini_array_start
|
||||
* __fini_array_end
|
||||
* __data_end__
|
||||
* __bss_start__
|
||||
* __bss_end__
|
||||
* __end__
|
||||
* end
|
||||
* __HeapLimit
|
||||
* __StackLimit
|
||||
* __StackTop
|
||||
* __stack
|
||||
*/
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text :
|
||||
{
|
||||
KEEP(*(.isr_vector))
|
||||
*(.text*)
|
||||
|
||||
KEEP(*(.init))
|
||||
KEEP(*(.fini))
|
||||
|
||||
/* .ctors */
|
||||
*crtbegin.o(.ctors)
|
||||
*crtbegin?.o(.ctors)
|
||||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
|
||||
*(SORT(.ctors.*))
|
||||
*(.ctors)
|
||||
|
||||
/* .dtors */
|
||||
*crtbegin.o(.dtors)
|
||||
*crtbegin?.o(.dtors)
|
||||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
|
||||
*(SORT(.dtors.*))
|
||||
*(.dtors)
|
||||
|
||||
*(.rodata*)
|
||||
|
||||
KEEP(*(.eh_frame*))
|
||||
} > FLASH
|
||||
|
||||
.ARM.extab :
|
||||
{
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} > FLASH
|
||||
|
||||
__exidx_start = .;
|
||||
.ARM.exidx :
|
||||
{
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} > FLASH
|
||||
__exidx_end = .;
|
||||
|
||||
__etext = .;
|
||||
|
||||
.data : AT (__etext)
|
||||
{
|
||||
__data_start__ = .;
|
||||
Image$$RW_IRAM1$$Base = .;
|
||||
*(vtable)
|
||||
*(.data*)
|
||||
|
||||
. = ALIGN(4);
|
||||
/* preinit data */
|
||||
PROVIDE (__preinit_array_start = .);
|
||||
KEEP(*(.preinit_array))
|
||||
PROVIDE (__preinit_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* init data */
|
||||
PROVIDE (__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE (__init_array_end = .);
|
||||
|
||||
|
||||
. = ALIGN(4);
|
||||
/* finit data */
|
||||
PROVIDE (__fini_array_start = .);
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
KEEP(*(.fini_array))
|
||||
PROVIDE (__fini_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* All data end */
|
||||
__data_end__ = .;
|
||||
|
||||
} > RAM
|
||||
|
||||
.bss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
Image$$RW_IRAM1$$ZI$$Limit = . ;
|
||||
} > RAM
|
||||
|
||||
.heap :
|
||||
{
|
||||
__end__ = .;
|
||||
end = __end__;
|
||||
*(.heap*)
|
||||
__HeapLimit = .;
|
||||
} > RAM
|
||||
|
||||
/* .stack_dummy section doesn't contains any symbols. It is only
|
||||
* used for linker to calculate size of stack sections, and assign
|
||||
* values to stack symbols later */
|
||||
.stack_dummy :
|
||||
{
|
||||
*(.stack)
|
||||
} > RAM
|
||||
|
||||
/* Set stack top to end of RAM, and stack limit move down by
|
||||
* size of stack_dummy section */
|
||||
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
|
||||
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
||||
PROVIDE(__stack = __StackTop);
|
||||
PROVIDE(__heapLimit = __HeapLimit);
|
||||
PROVIDE(__stackSize = __StackTop - __HeapLimit);
|
||||
|
||||
/* Area of memory, heap and stack, to fill on startup - 8 bytes at a time. */
|
||||
__FillStart = ALIGN(__end__, 8);
|
||||
|
||||
/* Check if data + heap + stack exceeds RAM limit */
|
||||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
|
||||
|
||||
|
||||
/* Code can explicitly ask for data to be
|
||||
placed in these higher RAM banks where
|
||||
they will be left uninitialized.
|
||||
*/
|
||||
.AHBSRAM0 (NOLOAD):
|
||||
{
|
||||
Image$$RW_IRAM2$$Base = . ;
|
||||
PROVIDE(__AHB0_block_start = .);
|
||||
*(AHBSRAM0)
|
||||
Image$$RW_IRAM2$$ZI$$Limit = .;
|
||||
PROVIDE(__AHB0_dyn_start = .);
|
||||
PROVIDE(__AHB0_end = ORIGIN(USB_RAM) + LENGTH(USB_RAM));
|
||||
} > USB_RAM
|
||||
|
||||
.AHBSRAM1 (NOLOAD):
|
||||
{
|
||||
Image$$RW_IRAM3$$Base = . ;
|
||||
PROVIDE(__AHB1_block_start = .);
|
||||
*(AHBSRAM1)
|
||||
Image$$RW_IRAM3$$ZI$$Limit = .;
|
||||
PROVIDE(__AHB1_dyn_start = .);
|
||||
PROVIDE(__AHB1_end = ORIGIN(ETH_RAM) + LENGTH(ETH_RAM));
|
||||
} > ETH_RAM
|
||||
}
|
||||
@@ -0,0 +1,629 @@
|
||||
/**************************************************************************//**
|
||||
* @file system_LPC17xx.c
|
||||
* @brief CMSIS Cortex-M3 Device System Source File for
|
||||
* NXP LPC17xx Device Series
|
||||
* @version V1.11
|
||||
* @date 21. June 2011
|
||||
*
|
||||
* @note
|
||||
* Copyright (C) 2009-2011 ARM Limited. All rights reserved.
|
||||
*
|
||||
* @par
|
||||
* ARM Limited (ARM) is supplying this software for use with Cortex-M
|
||||
* processor based microcontrollers. This file can be freely distributed
|
||||
* within development tools that are supporting such ARM based processors.
|
||||
*
|
||||
* @par
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
|
||||
* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
|
||||
* ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
|
||||
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include "LPC17xx.h"
|
||||
|
||||
|
||||
/** @addtogroup LPC17xx_System
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*
|
||||
//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
|
||||
*/
|
||||
|
||||
/*--------------------- Clock Configuration ----------------------------------
|
||||
//
|
||||
// <e> Clock Configuration
|
||||
// <h> System Controls and Status Register (SCS)
|
||||
// <o1.4> OSCRANGE: Main Oscillator Range Select
|
||||
// <0=> 1 MHz to 20 MHz
|
||||
// <1=> 15 MHz to 25 MHz
|
||||
// <e1.5> OSCEN: Main Oscillator Enable
|
||||
// </e>
|
||||
// </h>
|
||||
//
|
||||
// <h> Clock Source Select Register (CLKSRCSEL)
|
||||
// <o2.0..1> CLKSRC: PLL Clock Source Selection
|
||||
// <0=> Internal RC oscillator
|
||||
// <1=> Main oscillator
|
||||
// <2=> RTC oscillator
|
||||
// </h>
|
||||
//
|
||||
// <e3> PLL0 Configuration (Main PLL)
|
||||
// <h> PLL0 Configuration Register (PLL0CFG)
|
||||
// <i> F_cco0 = (2 * M * F_in) / N
|
||||
// <i> F_in must be in the range of 32 kHz to 50 MHz
|
||||
// <i> F_cco0 must be in the range of 275 MHz to 550 MHz
|
||||
// <o4.0..14> MSEL: PLL Multiplier Selection
|
||||
// <6-32768><#-1>
|
||||
// <i> M Value
|
||||
// <o4.16..23> NSEL: PLL Divider Selection
|
||||
// <1-256><#-1>
|
||||
// <i> N Value
|
||||
// </h>
|
||||
// </e>
|
||||
//
|
||||
// <e5> PLL1 Configuration (USB PLL)
|
||||
// <h> PLL1 Configuration Register (PLL1CFG)
|
||||
// <i> F_usb = M * F_osc or F_usb = F_cco1 / (2 * P)
|
||||
// <i> F_cco1 = F_osc * M * 2 * P
|
||||
// <i> F_cco1 must be in the range of 156 MHz to 320 MHz
|
||||
// <o6.0..4> MSEL: PLL Multiplier Selection
|
||||
// <1-32><#-1>
|
||||
// <i> M Value (for USB maximum value is 4)
|
||||
// <o6.5..6> PSEL: PLL Divider Selection
|
||||
// <0=> 1
|
||||
// <1=> 2
|
||||
// <2=> 4
|
||||
// <3=> 8
|
||||
// <i> P Value
|
||||
// </h>
|
||||
// </e>
|
||||
//
|
||||
// <h> CPU Clock Configuration Register (CCLKCFG)
|
||||
// <o7.0..7> CCLKSEL: Divide Value for CPU Clock from PLL0
|
||||
// <1-256><#-1>
|
||||
// </h>
|
||||
//
|
||||
// <h> USB Clock Configuration Register (USBCLKCFG)
|
||||
// <o8.0..3> USBSEL: Divide Value for USB Clock from PLL0
|
||||
// <0-15>
|
||||
// <i> Divide is USBSEL + 1
|
||||
// </h>
|
||||
//
|
||||
// <h> Peripheral Clock Selection Register 0 (PCLKSEL0)
|
||||
// <o9.0..1> PCLK_WDT: Peripheral Clock Selection for WDT
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.2..3> PCLK_TIMER0: Peripheral Clock Selection for TIMER0
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.4..5> PCLK_TIMER1: Peripheral Clock Selection for TIMER1
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.6..7> PCLK_UART0: Peripheral Clock Selection for UART0
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.8..9> PCLK_UART1: Peripheral Clock Selection for UART1
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.12..13> PCLK_PWM1: Peripheral Clock Selection for PWM1
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.14..15> PCLK_I2C0: Peripheral Clock Selection for I2C0
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.16..17> PCLK_SPI: Peripheral Clock Selection for SPI
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.20..21> PCLK_SSP1: Peripheral Clock Selection for SSP1
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.22..23> PCLK_DAC: Peripheral Clock Selection for DAC
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.24..25> PCLK_ADC: Peripheral Clock Selection for ADC
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o9.26..27> PCLK_CAN1: Peripheral Clock Selection for CAN1
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 6
|
||||
// <o9.28..29> PCLK_CAN2: Peripheral Clock Selection for CAN2
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 6
|
||||
// <o9.30..31> PCLK_ACF: Peripheral Clock Selection for ACF
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 6
|
||||
// </h>
|
||||
//
|
||||
// <h> Peripheral Clock Selection Register 1 (PCLKSEL1)
|
||||
// <o10.0..1> PCLK_QEI: Peripheral Clock Selection for the Quadrature Encoder Interface
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.2..3> PCLK_GPIO: Peripheral Clock Selection for GPIOs
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.4..5> PCLK_PCB: Peripheral Clock Selection for the Pin Connect Block
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.6..7> PCLK_I2C1: Peripheral Clock Selection for I2C1
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.10..11> PCLK_SSP0: Peripheral Clock Selection for SSP0
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.12..13> PCLK_TIMER2: Peripheral Clock Selection for TIMER2
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.14..15> PCLK_TIMER3: Peripheral Clock Selection for TIMER3
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.16..17> PCLK_UART2: Peripheral Clock Selection for UART2
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.18..19> PCLK_UART3: Peripheral Clock Selection for UART3
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.20..21> PCLK_I2C2: Peripheral Clock Selection for I2C2
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.22..23> PCLK_I2S: Peripheral Clock Selection for I2S
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.26..27> PCLK_RIT: Peripheral Clock Selection for the Repetitive Interrupt Timer
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.28..29> PCLK_SYSCON: Peripheral Clock Selection for the System Control Block
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// <o10.30..31> PCLK_MC: Peripheral Clock Selection for the Motor Control PWM
|
||||
// <0=> Pclk = Cclk / 4
|
||||
// <1=> Pclk = Cclk
|
||||
// <2=> Pclk = Cclk / 2
|
||||
// <3=> Pclk = Hclk / 8
|
||||
// </h>
|
||||
//
|
||||
// <h> Power Control for Peripherals Register (PCONP)
|
||||
// <o11.1> PCTIM0: Timer/Counter 0 power/clock enable
|
||||
// <o11.2> PCTIM1: Timer/Counter 1 power/clock enable
|
||||
// <o11.3> PCUART0: UART 0 power/clock enable
|
||||
// <o11.4> PCUART1: UART 1 power/clock enable
|
||||
// <o11.6> PCPWM1: PWM 1 power/clock enable
|
||||
// <o11.7> PCI2C0: I2C interface 0 power/clock enable
|
||||
// <o11.8> PCSPI: SPI interface power/clock enable
|
||||
// <o11.9> PCRTC: RTC power/clock enable
|
||||
// <o11.10> PCSSP1: SSP interface 1 power/clock enable
|
||||
// <o11.12> PCAD: A/D converter power/clock enable
|
||||
// <o11.13> PCCAN1: CAN controller 1 power/clock enable
|
||||
// <o11.14> PCCAN2: CAN controller 2 power/clock enable
|
||||
// <o11.15> PCGPIO: GPIOs power/clock enable
|
||||
// <o11.16> PCRIT: Repetitive interrupt timer power/clock enable
|
||||
// <o11.17> PCMC: Motor control PWM power/clock enable
|
||||
// <o11.18> PCQEI: Quadrature encoder interface power/clock enable
|
||||
// <o11.19> PCI2C1: I2C interface 1 power/clock enable
|
||||
// <o11.21> PCSSP0: SSP interface 0 power/clock enable
|
||||
// <o11.22> PCTIM2: Timer 2 power/clock enable
|
||||
// <o11.23> PCTIM3: Timer 3 power/clock enable
|
||||
// <o11.24> PCUART2: UART 2 power/clock enable
|
||||
// <o11.25> PCUART3: UART 3 power/clock enable
|
||||
// <o11.26> PCI2C2: I2C interface 2 power/clock enable
|
||||
// <o11.27> PCI2S: I2S interface power/clock enable
|
||||
// <o11.29> PCGPDMA: GP DMA function power/clock enable
|
||||
// <o11.30> PCENET: Ethernet block power/clock enable
|
||||
// <o11.31> PCUSB: USB interface power/clock enable
|
||||
// </h>
|
||||
//
|
||||
// <h> Clock Output Configuration Register (CLKOUTCFG)
|
||||
// <o12.0..3> CLKOUTSEL: Selects clock source for CLKOUT
|
||||
// <0=> CPU clock
|
||||
// <1=> Main oscillator
|
||||
// <2=> Internal RC oscillator
|
||||
// <3=> USB clock
|
||||
// <4=> RTC oscillator
|
||||
// <o12.4..7> CLKOUTDIV: Selects clock divider for CLKOUT
|
||||
// <1-16><#-1>
|
||||
// <o12.8> CLKOUT_EN: CLKOUT enable control
|
||||
// </h>
|
||||
//
|
||||
// </e>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/** @addtogroup LPC17xx_System_Defines LPC17xx System Defines
|
||||
@{
|
||||
*/
|
||||
|
||||
#define CLOCK_SETUP 1
|
||||
#define SCS_Val 0x00000020
|
||||
#define CLKSRCSEL_Val 0x00000001
|
||||
#define PLL0_SETUP 1 // WARNING: NOT USED, see SystemInit() below
|
||||
|
||||
# define PLL0CFG_Val 0x0000000B // WARNING: NOT USED, see SystemInit() below
|
||||
# define PLL1_SETUP 0 // WARNING: NOT USED, see SystemInit() below
|
||||
# define PLL1CFG_Val 0x00000000 // WARNING: NOT USED, see SystemInit() below
|
||||
# define CCLKCFG_Val 0x00000002 // WARNING: NOT USED, see SystemInit() below
|
||||
# define USBCLKCFG_Val 0x00000005 // WARNING: NOT USED, see SystemInit() below
|
||||
|
||||
#define PCLKSEL0_Val 0x00000000
|
||||
#define PCLKSEL1_Val 0x00000000
|
||||
#define PCONP_Val 0x042887DE
|
||||
#define CLKOUTCFG_Val 0x00000000
|
||||
|
||||
|
||||
/*--------------------- Flash Accelerator Configuration ----------------------
|
||||
//
|
||||
// <e> Flash Accelerator Configuration
|
||||
// <o1.12..15> FLASHTIM: Flash Access Time
|
||||
// <0=> 1 CPU clock (for CPU clock up to 20 MHz)
|
||||
// <1=> 2 CPU clocks (for CPU clock up to 40 MHz)
|
||||
// <2=> 3 CPU clocks (for CPU clock up to 60 MHz)
|
||||
// <3=> 4 CPU clocks (for CPU clock up to 80 MHz)
|
||||
// <4=> 5 CPU clocks (for CPU clock up to 100 MHz)
|
||||
// <5=> 6 CPU clocks (for any CPU clock)
|
||||
// </e>
|
||||
*/
|
||||
#define FLASH_SETUP 1
|
||||
#define FLASHCFG_Val 0x0000303A
|
||||
|
||||
/*
|
||||
//-------- <<< end of configuration section >>> ------------------------------
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Check the register settings
|
||||
*----------------------------------------------------------------------------*/
|
||||
#define CHECK_RANGE(val, min, max) ((val < min) || (val > max))
|
||||
#define CHECK_RSVD(val, mask) (val & mask)
|
||||
|
||||
/* Clock Configuration -------------------------------------------------------*/
|
||||
#if (CHECK_RSVD((SCS_Val), ~0x00000030))
|
||||
#error "SCS: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RANGE((CLKSRCSEL_Val), 0, 2))
|
||||
#error "CLKSRCSEL: Value out of range!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RSVD((PLL0CFG_Val), ~0x00FF7FFF))
|
||||
#error "PLL0CFG: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RSVD((PLL1CFG_Val), ~0x0000007F))
|
||||
#error "PLL1CFG: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
#if (PLL0_SETUP) /* if PLL0 is used */
|
||||
#if (CCLKCFG_Val < 2) /* CCLKSEL must be greater then 1 */
|
||||
#error "CCLKCFG: CCLKSEL must be greater then 1 if PLL0 is used!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (CHECK_RANGE((CCLKCFG_Val), 2, 255))
|
||||
#error "CCLKCFG: Value out of range!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RSVD((USBCLKCFG_Val), ~0x0000000F))
|
||||
#error "USBCLKCFG: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RSVD((PCLKSEL0_Val), 0x000C0C00))
|
||||
#error "PCLKSEL0: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RSVD((PCLKSEL1_Val), 0x03000300))
|
||||
#error "PCLKSEL1: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RSVD((PCONP_Val), 0x10100821))
|
||||
#error "PCONP: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
#if (CHECK_RSVD((CLKOUTCFG_Val), ~0x000001FF))
|
||||
#error "CLKOUTCFG: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
/* Flash Accelerator Configuration -------------------------------------------*/
|
||||
#if (CHECK_RSVD((FLASHCFG_Val), ~0x0000F07F))
|
||||
#error "FLASHCFG: Invalid values of reserved bits!"
|
||||
#endif
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
DEFINES
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Define clocks
|
||||
*----------------------------------------------------------------------------*/
|
||||
#define XTAL (12000000UL) /* Oscillator frequency */
|
||||
#define OSC_CLK ( XTAL) /* Main oscillator frequency */
|
||||
#define RTC_CLK ( 32000UL) /* RTC oscillator frequency */
|
||||
#define IRC_OSC ( 4000000UL) /* Internal RC oscillator frequency */
|
||||
|
||||
|
||||
/* F_cco0 = (2 * M * F_in) / N */
|
||||
#define __M (((PLL0CFG_Val ) & 0x7FFF) + 1)
|
||||
#define __N (((PLL0CFG_Val >> 16) & 0x00FF) + 1)
|
||||
#define __FCCO(__F_IN) ((2ULL * __M * __F_IN) / __N)
|
||||
#define __CCLK_DIV (((CCLKCFG_Val ) & 0x00FF) + 1)
|
||||
|
||||
/* Determine core clock frequency according to settings */
|
||||
#if (PLL0_SETUP)
|
||||
#if ((CLKSRCSEL_Val & 0x03) == 1)
|
||||
#define __CORE_CLK (__FCCO(OSC_CLK) / __CCLK_DIV)
|
||||
#elif ((CLKSRCSEL_Val & 0x03) == 2)
|
||||
#define __CORE_CLK (__FCCO(RTC_CLK) / __CCLK_DIV)
|
||||
#else
|
||||
#define __CORE_CLK (__FCCO(IRC_OSC) / __CCLK_DIV)
|
||||
#endif
|
||||
#else
|
||||
#if ((CLKSRCSEL_Val & 0x03) == 1)
|
||||
#define __CORE_CLK (OSC_CLK / __CCLK_DIV)
|
||||
#elif ((CLKSRCSEL_Val & 0x03) == 2)
|
||||
#define __CORE_CLK (RTC_CLK / __CCLK_DIV)
|
||||
#else
|
||||
#define __CORE_CLK (IRC_OSC / __CCLK_DIV)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup LPC17xx_System_Public_Variables LPC17xx System Public Variables
|
||||
@{
|
||||
*/
|
||||
/*----------------------------------------------------------------------------
|
||||
Clock Variable definitions
|
||||
*----------------------------------------------------------------------------*/
|
||||
uint32_t SystemCoreClock = __CORE_CLK;/*!< System Clock Frequency (Core Clock)*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup LPC17xx_System_Public_Functions LPC17xx System Public Functions
|
||||
@{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Update SystemCoreClock variable
|
||||
*
|
||||
* @param none
|
||||
* @return none
|
||||
*
|
||||
* @brief Updates the SystemCoreClock with current core Clock
|
||||
* retrieved from cpu registers.
|
||||
*/
|
||||
|
||||
void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */
|
||||
{
|
||||
/* Determine clock frequency according to clock register values */
|
||||
if (((LPC_SC->PLL0STAT >> 24) & 3) == 3) { /* If PLL0 enabled and connected */
|
||||
switch (LPC_SC->CLKSRCSEL & 0x03) {
|
||||
case 0: /* Int. RC oscillator => PLL0 */
|
||||
case 3: /* Reserved, default to Int. RC */
|
||||
SystemCoreClock = (IRC_OSC *
|
||||
((2ULL * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
|
||||
(((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1) /
|
||||
((LPC_SC->CCLKCFG & 0xFF)+ 1));
|
||||
break;
|
||||
case 1: /* Main oscillator => PLL0 */
|
||||
SystemCoreClock = (OSC_CLK *
|
||||
((2ULL * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
|
||||
(((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1) /
|
||||
((LPC_SC->CCLKCFG & 0xFF)+ 1));
|
||||
break;
|
||||
case 2: /* RTC oscillator => PLL0 */
|
||||
SystemCoreClock = (RTC_CLK *
|
||||
((2ULL * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
|
||||
(((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1) /
|
||||
((LPC_SC->CCLKCFG & 0xFF)+ 1));
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (LPC_SC->CLKSRCSEL & 0x03) {
|
||||
case 0: /* Int. RC oscillator => PLL0 */
|
||||
case 3: /* Reserved, default to Int. RC */
|
||||
SystemCoreClock = IRC_OSC / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
|
||||
break;
|
||||
case 1: /* Main oscillator => PLL0 */
|
||||
SystemCoreClock = OSC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
|
||||
break;
|
||||
case 2: /* RTC oscillator => PLL0 */
|
||||
SystemCoreClock = RTC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// detect 17x[4-8] (100MHz) or 17x9 (120MHz)
|
||||
static int can_120MHz() {
|
||||
#define IAP_LOCATION 0x1FFF1FF1
|
||||
uint32_t command[1];
|
||||
uint32_t result[5];
|
||||
typedef void (*IAP)(uint32_t*, uint32_t*);
|
||||
IAP iap = (IAP) IAP_LOCATION;
|
||||
|
||||
command[0] = 54;
|
||||
iap(command, result);
|
||||
|
||||
return result[1] & 0x00100000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the system
|
||||
*
|
||||
* @param none
|
||||
* @return none
|
||||
*
|
||||
* @brief Setup the microcontroller system.
|
||||
* Initialize the System.
|
||||
*/
|
||||
void SystemInit (void)
|
||||
{
|
||||
#if (CLOCK_SETUP) /* Clock Setup */
|
||||
LPC_SC->SCS = SCS_Val;
|
||||
if (LPC_SC->SCS & (1 << 5)) { /* If Main Oscillator is enabled */
|
||||
while ((LPC_SC->SCS & (1<<6)) == 0);/* Wait for Oscillator to be ready */
|
||||
}
|
||||
|
||||
/* Periphral clock must be selected before PLL0 enabling and connecting
|
||||
* - according errata.lpc1768-16.March.2010 -
|
||||
*/
|
||||
LPC_SC->PCLKSEL0 = PCLKSEL0_Val; /* Peripheral Clock Selection */
|
||||
LPC_SC->PCLKSEL1 = PCLKSEL1_Val;
|
||||
|
||||
/*
|
||||
* PLL0 MUST be 275 - 550MHz
|
||||
*
|
||||
* PLL0 = Fin * M * 2 / N
|
||||
*
|
||||
* Fcpu = PLL0 / D
|
||||
*
|
||||
* PLL0CFG = (M - 1) + ((N - 1) << 16)
|
||||
* CCLKCFG = D - 1
|
||||
*
|
||||
* Common combinations (assuming 12MHz crystal):
|
||||
*
|
||||
* | Fcpu |--| Fin | M | N | PLL0 | D | PLL0CFG | CCLKCFG |
|
||||
* 96MHz :2* 12MHz * 12 / 1 = 288MHz / 3 0x0000B 0x2
|
||||
* 100MHz :2* 12MHz * 25 / 2 = 300MHz / 3 0x10018 0x2
|
||||
* 120MHz :2* 12MHz * 15 / 1 = 360MHz / 3 0x0000E 0x2
|
||||
*
|
||||
*/
|
||||
|
||||
LPC_SC->CLKSRCSEL = CLKSRCSEL_Val; /* Select Clock Source for PLL0 */
|
||||
|
||||
LPC_SC->CCLKCFG = 0x00000002; /* Setup CPU Clock Divider */
|
||||
|
||||
if(can_120MHz()) {
|
||||
LPC_SC->PLL0CFG = 0x0000000E; /* configure PLL0 */
|
||||
LPC_SC->PLL0FEED = 0xAA;
|
||||
LPC_SC->PLL0FEED = 0x55;
|
||||
} else {
|
||||
LPC_SC->PLL0CFG = 0x00010018; // 100MHz
|
||||
LPC_SC->PLL0FEED = 0xAA;
|
||||
LPC_SC->PLL0FEED = 0x55;
|
||||
}
|
||||
|
||||
LPC_SC->PLL0CON = 0x01; /* PLL0 Enable */
|
||||
LPC_SC->PLL0FEED = 0xAA;
|
||||
LPC_SC->PLL0FEED = 0x55;
|
||||
while (!(LPC_SC->PLL0STAT & (1<<26)));/* Wait for PLOCK0 */
|
||||
|
||||
LPC_SC->PLL0CON = 0x03; /* PLL0 Enable & Connect */
|
||||
LPC_SC->PLL0FEED = 0xAA;
|
||||
LPC_SC->PLL0FEED = 0x55;
|
||||
while (!(LPC_SC->PLL0STAT & ((1<<25) | (1<<24))));/* Wait for PLLC0_STAT & PLLE0_STAT */
|
||||
|
||||
/*
|
||||
* USBCLK = Fin * M, where M is (1..32)
|
||||
*
|
||||
* we need a USBCLK of 48MHz, so given a 12MHz crystal, M must be 4
|
||||
*
|
||||
* PLL1 = USBCLK * 2 * P, where P is one of (1, 2, 4, 8)
|
||||
*
|
||||
* PLL1 MUST be 156 to 320MHz.
|
||||
* P=2 gives 192MHz, the only valid value within range
|
||||
*
|
||||
* PLL1CFG = (log2(P) << 5) + (M - 1)
|
||||
* = (1 << 5) + 3
|
||||
* = 0x23 for a 12MHz crystal
|
||||
*/
|
||||
LPC_SC->PLL1CFG = 0x00000023;
|
||||
LPC_SC->PLL1FEED = 0xAA;
|
||||
LPC_SC->PLL1FEED = 0x55;
|
||||
|
||||
LPC_SC->PLL1CON = 0x01; /* PLL1 Enable */
|
||||
LPC_SC->PLL1FEED = 0xAA;
|
||||
LPC_SC->PLL1FEED = 0x55;
|
||||
while (!(LPC_SC->PLL1STAT & (1<<10)));/* Wait for PLOCK1 */
|
||||
|
||||
LPC_SC->PLL1CON = 0x03; /* PLL1 Enable & Connect */
|
||||
LPC_SC->PLL1FEED = 0xAA;
|
||||
LPC_SC->PLL1FEED = 0x55;
|
||||
while (!(LPC_SC->PLL1STAT & ((1<< 9) | (1<< 8))));/* Wait for PLLC1_STAT & PLLE1_STAT */
|
||||
|
||||
// this sets up {global uint32 SystemCoreClock} with the new speed
|
||||
SystemCoreClockUpdate();
|
||||
|
||||
LPC_SC->PCONP = PCONP_Val; /* Power Control for Peripherals */
|
||||
|
||||
LPC_SC->CLKOUTCFG = CLKOUTCFG_Val; /* Clock Output Configuration */
|
||||
#endif
|
||||
|
||||
#if (FLASH_SETUP == 1) /* Flash Accelerator Setup */
|
||||
LPC_SC->FLASHCFG = (LPC_SC->FLASHCFG & ~0x0000F000) | FLASHCFG_Val;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
@@ -0,0 +1,306 @@
|
||||
/**********************************************************************
|
||||
* $Id$ debug_frmwrk.c 2010-05-21
|
||||
*
|
||||
* @file debug_frmwrk.c
|
||||
* @brief Contains some utilities that used for debugging through UART
|
||||
* @version 2.0
|
||||
* @date 21. May. 2010
|
||||
* @author NXP MCU SW Application Team
|
||||
*
|
||||
* Copyright(C) 2010, NXP Semiconductor
|
||||
* All rights reserved.
|
||||
*
|
||||
***********************************************************************
|
||||
* Software that is described herein is for illustrative purposes only
|
||||
* which provides customers with programming information regarding the
|
||||
* products. This software is supplied "AS IS" without any warranties.
|
||||
* NXP Semiconductors assumes no responsibility or liability for the
|
||||
* use of the software, conveys no license or title under any patent,
|
||||
* copyright, or mask work right to the product. NXP Semiconductors
|
||||
* reserves the right to make changes in the software without
|
||||
* notification. NXP Semiconductors also make no representation or
|
||||
* warranty that such application will be suitable for the specified
|
||||
* use without further testing or modification.
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation is hereby granted, under NXP Semiconductors'
|
||||
* relevant copyright in the software, without fee, provided that it
|
||||
* is used in conjunction with NXP Semiconductors microcontrollers. This
|
||||
* copyright, permission, and disclaimer notice must appear in all copies of
|
||||
* this code.
|
||||
**********************************************************************/
|
||||
|
||||
#include "debug_frmwrk.h"
|
||||
#include "lpc17xx_pinsel.h"
|
||||
|
||||
/* If this source file built with example, the LPC17xx FW library configuration
|
||||
* file in each example directory ("lpc17xx_libcfg.h") must be included,
|
||||
* otherwise the default FW library configuration file must be included instead
|
||||
*/
|
||||
#ifdef __BUILD_WITH_EXAMPLE__
|
||||
#include "lpc17xx_libcfg.h"
|
||||
#else
|
||||
#include "lpc17xx_libcfg_default.h"
|
||||
#endif
|
||||
|
||||
#ifdef _DBGFWK
|
||||
|
||||
/* Debug framework */
|
||||
static Bool debug_frmwrk_initialized = FALSE;
|
||||
|
||||
void (*_db_msg)(LPC_UART_TypeDef *UARTx, const void *s) = UARTPuts;
|
||||
void (*_db_msg_)(LPC_UART_TypeDef *UARTx, const void *s) = UARTPuts_;
|
||||
void (*_db_char)(LPC_UART_TypeDef *UARTx, uint8_t ch) = UARTPutChar;
|
||||
void (*_db_dec)(LPC_UART_TypeDef *UARTx, uint8_t decn) = UARTPutHex;
|
||||
void (*_db_dec_16)(LPC_UART_TypeDef *UARTx, uint16_t decn) = UARTPutHex16;
|
||||
void (*_db_dec_32)(LPC_UART_TypeDef *UARTx, uint32_t decn) = UARTPutHex32;
|
||||
void (*_db_hex)(LPC_UART_TypeDef *UARTx, uint8_t hexn) = UARTPutDec;
|
||||
void (*_db_hex_16)(LPC_UART_TypeDef *UARTx, uint16_t hexn) = UARTPutDec16;
|
||||
void (*_db_hex_32)(LPC_UART_TypeDef *UARTx, uint32_t hexn) = UARTPutDec32;
|
||||
uint8_t (*_db_get_char)(LPC_UART_TypeDef *UARTx) = UARTGetChar;
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a character to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] ch Character to put
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPutChar(LPC_UART_TypeDef *UARTx, uint8_t ch) {
|
||||
if (debug_frmwrk_initialized)
|
||||
UART_Send(UARTx, &ch, 1, BLOCKING);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get a character to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @return character value that returned
|
||||
**********************************************************************/
|
||||
uint8_t UARTGetChar(LPC_UART_TypeDef *UARTx) {
|
||||
uint8_t tmp = 0;
|
||||
|
||||
if (debug_frmwrk_initialized)
|
||||
UART_Receive(UARTx, &tmp, 1, BLOCKING);
|
||||
|
||||
return(tmp);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a string to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] str string to put
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPuts(LPC_UART_TypeDef *UARTx, const void *str) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
uint8_t *s = (uint8_t*)str;
|
||||
while (*s) UARTPutChar(UARTx, *s++);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a string to UART port and print new line
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] str String to put
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPuts_(LPC_UART_TypeDef *UARTx, const void *str) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
UARTPuts (UARTx, str);
|
||||
UARTPuts (UARTx, "\n\r");
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a decimal number to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] decnum Decimal number (8-bit long)
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPutDec(LPC_UART_TypeDef *UARTx, uint8_t decnum) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
uint8_t c1 = decnum%10;
|
||||
uint8_t c2 = (decnum / 10) % 10;
|
||||
uint8_t c3 = (decnum / 100) % 10;
|
||||
UARTPutChar(UARTx, '0'+c3);
|
||||
UARTPutChar(UARTx, '0'+c2);
|
||||
UARTPutChar(UARTx, '0'+c1);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a decimal number to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] decnum Decimal number (8-bit long)
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPutDec16(LPC_UART_TypeDef *UARTx, uint16_t decnum) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
uint8_t c1 = decnum%10;
|
||||
uint8_t c2 = (decnum / 10) % 10;
|
||||
uint8_t c3 = (decnum / 100) % 10;
|
||||
uint8_t c4 = (decnum / 1000) % 10;
|
||||
uint8_t c5 = (decnum / 10000) % 10;
|
||||
UARTPutChar(UARTx, '0'+c5);
|
||||
UARTPutChar(UARTx, '0'+c4);
|
||||
UARTPutChar(UARTx, '0'+c3);
|
||||
UARTPutChar(UARTx, '0'+c2);
|
||||
UARTPutChar(UARTx, '0'+c1);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a decimal number to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] decnum Decimal number (8-bit long)
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPutDec32(LPC_UART_TypeDef *UARTx, uint32_t decnum) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
const uint8_t c1 = decnum % 10,
|
||||
c2 = (decnum / 10) % 10,
|
||||
c3 = (decnum / 100) % 10,
|
||||
c4 = (decnum / 1000) % 10,
|
||||
c5 = (decnum / 10000) % 10,
|
||||
c6 = (decnum / 100000) % 10,
|
||||
c7 = (decnum / 1000000) % 10,
|
||||
c8 = (decnum / 10000000) % 10,
|
||||
c9 = (decnum / 100000000) % 10,
|
||||
c10 = (decnum / 1000000000) % 10;
|
||||
UARTPutChar(UARTx, '0' + c10);
|
||||
UARTPutChar(UARTx, '0' + c9);
|
||||
UARTPutChar(UARTx, '0' + c8);
|
||||
UARTPutChar(UARTx, '0' + c7);
|
||||
UARTPutChar(UARTx, '0' + c6);
|
||||
UARTPutChar(UARTx, '0' + c5);
|
||||
UARTPutChar(UARTx, '0' + c4);
|
||||
UARTPutChar(UARTx, '0' + c3);
|
||||
UARTPutChar(UARTx, '0' + c2);
|
||||
UARTPutChar(UARTx, '0' + c1);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a hex number to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] hexnum Hex number (8-bit long)
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPutHex(LPC_UART_TypeDef *UARTx, uint8_t hexnum) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
UARTPuts(UARTx, "0x");
|
||||
uint8_t nibble, i = 1;
|
||||
do {
|
||||
nibble = (hexnum >> (4 * i)) & 0x0F;
|
||||
UARTPutChar(UARTx, (nibble > 9) ? ('A' + nibble - 10) : ('0' + nibble));
|
||||
} while (i--);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a hex number to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] hexnum Hex number (16-bit long)
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPutHex16(LPC_UART_TypeDef *UARTx, uint16_t hexnum) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
UARTPuts(UARTx, "0x");
|
||||
uint8_t nibble, i = 3;
|
||||
do {
|
||||
nibble = (hexnum >> (4 * i)) & 0x0F;
|
||||
UARTPutChar(UARTx, (nibble > 9) ? ('A' + nibble - 10) : ('0' + nibble));
|
||||
} while (i--);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Puts a hex number to UART port
|
||||
* @param[in] UARTx Pointer to UART peripheral
|
||||
* @param[in] hexnum Hex number (32-bit long)
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void UARTPutHex32(LPC_UART_TypeDef *UARTx, uint32_t hexnum) {
|
||||
if (!debug_frmwrk_initialized) return;
|
||||
|
||||
UARTPuts(UARTx, "0x");
|
||||
uint8_t nibble, i = 7;
|
||||
do {
|
||||
nibble = (hexnum >> (4 * i)) & 0x0F;
|
||||
UARTPutChar(UARTx, (nibble > 9) ? ('A' + nibble - 10) : ('0' + nibble));
|
||||
} while (i--);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief print function that supports format as same as printf()
|
||||
* function of <stdio.h> library
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
//void _printf (const char *format, ...) {
|
||||
// static char buffer[512 + 1];
|
||||
// va_list vArgs;
|
||||
// char *tmp;
|
||||
// va_start(vArgs, format);
|
||||
// vsprintf((char *)buffer, (char const *)format, vArgs);
|
||||
// va_end(vArgs);
|
||||
//
|
||||
// _DBG(buffer);
|
||||
//}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Initialize Debug frame work through initializing UART port
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void debug_frmwrk_init(void) {
|
||||
UART_CFG_Type UARTConfigStruct;
|
||||
PINSEL_CFG_Type PinCfg;
|
||||
|
||||
#if (USED_UART_DEBUG_PORT==0)
|
||||
/*
|
||||
* Initialize UART0 pin connect
|
||||
*/
|
||||
PinCfg.Funcnum = 1;
|
||||
PinCfg.OpenDrain = 0;
|
||||
PinCfg.Pinmode = 0;
|
||||
PinCfg.Pinnum = 2;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg);
|
||||
PinCfg.Pinnum = 3;
|
||||
PINSEL_ConfigPin(&PinCfg);
|
||||
|
||||
#elif (USED_UART_DEBUG_PORT==1)
|
||||
/*
|
||||
* Initialize UART1 pin connect
|
||||
*/
|
||||
PinCfg.Funcnum = 1;
|
||||
PinCfg.OpenDrain = 0;
|
||||
PinCfg.Pinmode = 0;
|
||||
PinCfg.Pinnum = 15;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg);
|
||||
PinCfg.Pinnum = 16;
|
||||
PINSEL_ConfigPin(&PinCfg);
|
||||
#endif
|
||||
|
||||
/* Initialize UART Configuration parameter structure to default state:
|
||||
* Baudrate = 9600bps
|
||||
* 8 data bit
|
||||
* 1 Stop bit
|
||||
* None parity
|
||||
*/
|
||||
UART_ConfigStructInit(&UARTConfigStruct);
|
||||
|
||||
// Re-configure baudrate to 115200bps
|
||||
UARTConfigStruct.Baud_rate = 115200;
|
||||
|
||||
// Initialize DEBUG_UART_PORT peripheral with given to corresponding parameter
|
||||
UART_Init((LPC_UART_TypeDef *)DEBUG_UART_PORT, &UARTConfigStruct);
|
||||
|
||||
// Enable UART Transmit
|
||||
UART_TxCmd((LPC_UART_TypeDef *)DEBUG_UART_PORT, ENABLE);
|
||||
|
||||
debug_frmwrk_initialized = TRUE;
|
||||
}
|
||||
|
||||
#endif // _DBGFWK
|
||||
@@ -0,0 +1,358 @@
|
||||
/**********************************************************************
|
||||
* $Id$ lpc17xx_adc.c 2010-06-18
|
||||
*//**
|
||||
* @file lpc17xx_adc.c
|
||||
* @brief Contains all functions support for ADC firmware library on LPC17xx
|
||||
* @version 3.1
|
||||
* @date 26. July. 2011
|
||||
* @author NXP MCU SW Application Team
|
||||
*
|
||||
* Copyright(C) 2011, NXP Semiconductor
|
||||
* All rights reserved.
|
||||
*
|
||||
***********************************************************************
|
||||
* Software that is described herein is for illustrative purposes only
|
||||
* which provides customers with programming information regarding the
|
||||
* products. This software is supplied "AS IS" without any warranties.
|
||||
* NXP Semiconductors assumes no responsibility or liability for the
|
||||
* use of the software, conveys no license or title under any patent,
|
||||
* copyright, or mask work right to the product. NXP Semiconductors
|
||||
* reserves the right to make changes in the software without
|
||||
* notification. NXP Semiconductors also make no representation or
|
||||
* warranty that such application will be suitable for the specified
|
||||
* use without further testing or modification.
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation is hereby granted, under NXP Semiconductors'
|
||||
* relevant copyright in the software, without fee, provided that it
|
||||
* is used in conjunction with NXP Semiconductors microcontrollers. This
|
||||
* copyright, permission, and disclaimer notice must appear in all copies of
|
||||
* this code.
|
||||
**********************************************************************/
|
||||
|
||||
/* Peripheral group ----------------------------------------------------------- */
|
||||
/** @addtogroup ADC
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------- */
|
||||
#include "lpc17xx_adc.h"
|
||||
#include "lpc17xx_clkpwr.h"
|
||||
|
||||
/* If this source file built with example, the LPC17xx FW library configuration
|
||||
* file in each example directory ("lpc17xx_libcfg.h") must be included,
|
||||
* otherwise the default FW library configuration file must be included instead
|
||||
*/
|
||||
#ifdef __BUILD_WITH_EXAMPLE__
|
||||
#include "lpc17xx_libcfg.h"
|
||||
#else
|
||||
#include "lpc17xx_libcfg_default.h"
|
||||
#endif /* __BUILD_WITH_EXAMPLE__ */
|
||||
|
||||
|
||||
#ifdef _ADC
|
||||
|
||||
/* Public Functions ----------------------------------------------------------- */
|
||||
/** @addtogroup ADC_Public_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Initial for ADC
|
||||
* + Set bit PCADC
|
||||
* + Set clock for ADC
|
||||
* + Set Clock Frequency
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] rate ADC conversion rate, should be <=200KHz
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void ADC_Init(LPC_ADC_TypeDef *ADCx, uint32_t rate)
|
||||
{
|
||||
uint32_t ADCPClk, temp, tmp;
|
||||
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_RATE(rate));
|
||||
|
||||
// Turn on power and clock
|
||||
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCAD, ENABLE);
|
||||
|
||||
ADCx->ADCR = 0;
|
||||
|
||||
//Enable PDN bit
|
||||
tmp = ADC_CR_PDN;
|
||||
// Set clock frequency
|
||||
ADCPClk = CLKPWR_GetPCLK(CLKPWR_PCLKSEL_ADC);
|
||||
/* The APB clock (PCLK_ADC0) is divided by (CLKDIV+1) to produce the clock for
|
||||
* A/D converter, which should be less than or equal to 13MHz.
|
||||
* A fully conversion requires 65 of these clocks.
|
||||
* ADC clock = PCLK_ADC0 / (CLKDIV + 1);
|
||||
* ADC rate = ADC clock / 65;
|
||||
*/
|
||||
temp = rate * 65;
|
||||
temp = (ADCPClk * 2 + temp)/(2 * temp) - 1; //get the round value by fomular: (2*A + B)/(2*B)
|
||||
tmp |= ADC_CR_CLKDIV(temp);
|
||||
|
||||
ADCx->ADCR = tmp;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Close ADC
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void ADC_DeInit(LPC_ADC_TypeDef *ADCx)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
if (ADCx->ADCR & ADC_CR_START_MASK) //need to stop START bits before DeInit
|
||||
ADCx->ADCR &= ~ADC_CR_START_MASK;
|
||||
// Clear SEL bits
|
||||
ADCx->ADCR &= ~0xFF;
|
||||
// Clear PDN bit
|
||||
ADCx->ADCR &= ~ADC_CR_PDN;
|
||||
// Turn on power and clock
|
||||
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCAD, DISABLE);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get Result conversion from A/D data register
|
||||
* @param[in] channel number which want to read back the result
|
||||
* @return Result of conversion
|
||||
*********************************************************************/
|
||||
uint32_t ADC_GetData(uint32_t channel)
|
||||
{
|
||||
uint32_t adc_value;
|
||||
|
||||
CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel));
|
||||
|
||||
adc_value = *(uint32_t *)((&LPC_ADC->ADDR0) + channel);
|
||||
return ADC_GDR_RESULT(adc_value);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set start mode for ADC
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] start_mode Start mode choose one of modes in
|
||||
* 'ADC_START_OPT' enumeration type definition, should be:
|
||||
* - ADC_START_CONTINUOUS
|
||||
* - ADC_START_NOW
|
||||
* - ADC_START_ON_EINT0
|
||||
* - ADC_START_ON_CAP01
|
||||
* - ADC_START_ON_MAT01
|
||||
* - ADC_START_ON_MAT03
|
||||
* - ADC_START_ON_MAT10
|
||||
* - ADC_START_ON_MAT11
|
||||
* @return None
|
||||
*********************************************************************/
|
||||
void ADC_StartCmd(LPC_ADC_TypeDef *ADCx, uint8_t start_mode)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_START_OPT(start_mode));
|
||||
|
||||
ADCx->ADCR &= ~ADC_CR_START_MASK;
|
||||
ADCx->ADCR |=ADC_CR_START_MODE_SEL((uint32_t)start_mode);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief ADC Burst mode setting
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] NewState
|
||||
* - 1: Set Burst mode
|
||||
* - 0: reset Burst mode
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void ADC_BurstCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
|
||||
ADCx->ADCR &= ~ADC_CR_BURST;
|
||||
if (NewState){
|
||||
ADCx->ADCR |= ADC_CR_BURST;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set AD conversion in power mode
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] NewState
|
||||
* - 1: AD converter is optional
|
||||
* - 0: AD Converter is in power down mode
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void ADC_PowerdownCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
|
||||
ADCx->ADCR &= ~ADC_CR_PDN;
|
||||
if (NewState){
|
||||
ADCx->ADCR |= ADC_CR_PDN;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set Edge start configuration
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] EdgeOption is ADC_START_ON_RISING and ADC_START_ON_FALLING
|
||||
* 0:ADC_START_ON_RISING
|
||||
* 1:ADC_START_ON_FALLING
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void ADC_EdgeStartConfig(LPC_ADC_TypeDef *ADCx, uint8_t EdgeOption)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_START_ON_EDGE_OPT(EdgeOption));
|
||||
|
||||
ADCx->ADCR &= ~ADC_CR_EDGE;
|
||||
if (EdgeOption){
|
||||
ADCx->ADCR |= ADC_CR_EDGE;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief ADC interrupt configuration
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] IntType: type of interrupt, should be:
|
||||
* - ADC_ADINTEN0: Interrupt channel 0
|
||||
* - ADC_ADINTEN1: Interrupt channel 1
|
||||
* ...
|
||||
* - ADC_ADINTEN7: Interrupt channel 7
|
||||
* - ADC_ADGINTEN: Individual channel/global flag done generate an interrupt
|
||||
* @param[in] NewState:
|
||||
* - SET : enable ADC interrupt
|
||||
* - RESET: disable ADC interrupt
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void ADC_IntConfig (LPC_ADC_TypeDef *ADCx, ADC_TYPE_INT_OPT IntType, FunctionalState NewState)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_TYPE_INT_OPT(IntType));
|
||||
|
||||
ADCx->ADINTEN &= ~ADC_INTEN_CH(IntType);
|
||||
if (NewState){
|
||||
ADCx->ADINTEN |= ADC_INTEN_CH(IntType);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enable/Disable ADC channel number
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] Channel channel number
|
||||
* @param[in] NewState Enable or Disable
|
||||
*
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void ADC_ChannelCmd (LPC_ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(Channel));
|
||||
|
||||
if (NewState == ENABLE) {
|
||||
ADCx->ADCR |= ADC_CR_CH_SEL(Channel);
|
||||
} else {
|
||||
if (ADCx->ADCR & ADC_CR_START_MASK) //need to stop START bits before disable channel
|
||||
ADCx->ADCR &= ~ADC_CR_START_MASK;
|
||||
ADCx->ADCR &= ~ADC_CR_CH_SEL(Channel);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get ADC result
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] channel: channel number, should be 0...7
|
||||
* @return Data conversion
|
||||
**********************************************************************/
|
||||
uint16_t ADC_ChannelGetData(LPC_ADC_TypeDef *ADCx, uint8_t channel)
|
||||
{
|
||||
uint32_t adc_value;
|
||||
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel));
|
||||
|
||||
adc_value = *(uint32_t *) ((&ADCx->ADDR0) + channel);
|
||||
return ADC_DR_RESULT(adc_value);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get ADC Chanel status from ADC data register
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] channel: channel number, should be 0..7
|
||||
* @param[in] StatusType
|
||||
* 0:Burst status
|
||||
* 1:Done status
|
||||
* @return SET / RESET
|
||||
**********************************************************************/
|
||||
FlagStatus ADC_ChannelGetStatus(LPC_ADC_TypeDef *ADCx, uint8_t channel, uint32_t StatusType)
|
||||
{
|
||||
uint32_t temp;
|
||||
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel));
|
||||
CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType));
|
||||
|
||||
temp = *(uint32_t *) ((&ADCx->ADDR0) + channel);
|
||||
if (StatusType) {
|
||||
temp &= ADC_DR_DONE_FLAG;
|
||||
}else{
|
||||
temp &= ADC_DR_OVERRUN_FLAG;
|
||||
}
|
||||
if (temp) {
|
||||
return SET;
|
||||
} else {
|
||||
return RESET;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get ADC Data from AD Global register
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @return Result of conversion
|
||||
**********************************************************************/
|
||||
uint32_t ADC_GlobalGetData(LPC_ADC_TypeDef *ADCx)
|
||||
{
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
|
||||
return ((uint32_t)(ADCx->ADGDR));
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get ADC Chanel status from AD global data register
|
||||
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
|
||||
* @param[in] StatusType
|
||||
* 0:Burst status
|
||||
* 1:Done status
|
||||
* @return SET / RESET
|
||||
**********************************************************************/
|
||||
FlagStatus ADC_GlobalGetStatus(LPC_ADC_TypeDef *ADCx, uint32_t StatusType)
|
||||
{
|
||||
uint32_t temp;
|
||||
|
||||
CHECK_PARAM(PARAM_ADCx(ADCx));
|
||||
CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType));
|
||||
|
||||
temp = ADCx->ADGDR;
|
||||
if (StatusType){
|
||||
temp &= ADC_DR_DONE_FLAG;
|
||||
}else{
|
||||
temp &= ADC_DR_OVERRUN_FLAG;
|
||||
}
|
||||
if (temp){
|
||||
return SET;
|
||||
}else{
|
||||
return RESET;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* _ADC */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* --------------------------------- End Of File ------------------------------ */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,350 @@
|
||||
/**********************************************************************
|
||||
* $Id$ lpc17xx_clkpwr.c 2010-06-18
|
||||
*//**
|
||||
* @file lpc17xx_clkpwr.c
|
||||
* @brief Contains all functions support for Clock and Power Control
|
||||
* firmware library on LPC17xx
|
||||
* @version 3.0
|
||||
* @date 18. June. 2010
|
||||
* @author NXP MCU SW Application Team
|
||||
*
|
||||
* Copyright(C) 2010, NXP Semiconductor
|
||||
* All rights reserved.
|
||||
*
|
||||
***********************************************************************
|
||||
* Software that is described herein is for illustrative purposes only
|
||||
* which provides customers with programming information regarding the
|
||||
* products. This software is supplied "AS IS" without any warranties.
|
||||
* NXP Semiconductors assumes no responsibility or liability for the
|
||||
* use of the software, conveys no license or title under any patent,
|
||||
* copyright, or mask work right to the product. NXP Semiconductors
|
||||
* reserves the right to make changes in the software without
|
||||
* notification. NXP Semiconductors also make no representation or
|
||||
* warranty that such application will be suitable for the specified
|
||||
* use without further testing or modification.
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation is hereby granted, under NXP Semiconductors'
|
||||
* relevant copyright in the software, without fee, provided that it
|
||||
* is used in conjunction with NXP Semiconductors microcontrollers. This
|
||||
* copyright, permission, and disclaimer notice must appear in all copies of
|
||||
* this code.
|
||||
**********************************************************************/
|
||||
|
||||
/* Peripheral group ----------------------------------------------------------- */
|
||||
/** @addtogroup CLKPWR
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------- */
|
||||
#include "lpc17xx_clkpwr.h"
|
||||
|
||||
|
||||
/* Public Functions ----------------------------------------------------------- */
|
||||
/** @addtogroup CLKPWR_Public_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set value of each Peripheral Clock Selection
|
||||
* @param[in] ClkType Peripheral Clock Selection of each type,
|
||||
* should be one of the following:
|
||||
* - CLKPWR_PCLKSEL_WDT : WDT
|
||||
- CLKPWR_PCLKSEL_TIMER0 : Timer 0
|
||||
- CLKPWR_PCLKSEL_TIMER1 : Timer 1
|
||||
- CLKPWR_PCLKSEL_UART0 : UART 0
|
||||
- CLKPWR_PCLKSEL_UART1 : UART 1
|
||||
- CLKPWR_PCLKSEL_PWM1 : PWM 1
|
||||
- CLKPWR_PCLKSEL_I2C0 : I2C 0
|
||||
- CLKPWR_PCLKSEL_SPI : SPI
|
||||
- CLKPWR_PCLKSEL_SSP1 : SSP 1
|
||||
- CLKPWR_PCLKSEL_DAC : DAC
|
||||
- CLKPWR_PCLKSEL_ADC : ADC
|
||||
- CLKPWR_PCLKSEL_CAN1 : CAN 1
|
||||
- CLKPWR_PCLKSEL_CAN2 : CAN 2
|
||||
- CLKPWR_PCLKSEL_ACF : ACF
|
||||
- CLKPWR_PCLKSEL_QEI : QEI
|
||||
- CLKPWR_PCLKSEL_PCB : PCB
|
||||
- CLKPWR_PCLKSEL_I2C1 : I2C 1
|
||||
- CLKPWR_PCLKSEL_SSP0 : SSP 0
|
||||
- CLKPWR_PCLKSEL_TIMER2 : Timer 2
|
||||
- CLKPWR_PCLKSEL_TIMER3 : Timer 3
|
||||
- CLKPWR_PCLKSEL_UART2 : UART 2
|
||||
- CLKPWR_PCLKSEL_UART3 : UART 3
|
||||
- CLKPWR_PCLKSEL_I2C2 : I2C 2
|
||||
- CLKPWR_PCLKSEL_I2S : I2S
|
||||
- CLKPWR_PCLKSEL_RIT : RIT
|
||||
- CLKPWR_PCLKSEL_SYSCON : SYSCON
|
||||
- CLKPWR_PCLKSEL_MC : MC
|
||||
|
||||
* @param[in] DivVal Value of divider, should be:
|
||||
* - CLKPWR_PCLKSEL_CCLK_DIV_4 : PCLK_peripheral = CCLK/4
|
||||
* - CLKPWR_PCLKSEL_CCLK_DIV_1 : PCLK_peripheral = CCLK/1
|
||||
* - CLKPWR_PCLKSEL_CCLK_DIV_2 : PCLK_peripheral = CCLK/2
|
||||
*
|
||||
* @return none
|
||||
**********************************************************************/
|
||||
void CLKPWR_SetPCLKDiv (uint32_t ClkType, uint32_t DivVal)
|
||||
{
|
||||
uint32_t bitpos;
|
||||
|
||||
bitpos = (ClkType < 32) ? (ClkType) : (ClkType - 32);
|
||||
|
||||
/* PCLKSEL0 selected */
|
||||
if (ClkType < 32)
|
||||
{
|
||||
/* Clear two bit at bit position */
|
||||
LPC_SC->PCLKSEL0 &= (~(CLKPWR_PCLKSEL_BITMASK(bitpos)));
|
||||
|
||||
/* Set two selected bit */
|
||||
LPC_SC->PCLKSEL0 |= (CLKPWR_PCLKSEL_SET(bitpos, DivVal));
|
||||
}
|
||||
/* PCLKSEL1 selected */
|
||||
else
|
||||
{
|
||||
/* Clear two bit at bit position */
|
||||
LPC_SC->PCLKSEL1 &= ~(CLKPWR_PCLKSEL_BITMASK(bitpos));
|
||||
|
||||
/* Set two selected bit */
|
||||
LPC_SC->PCLKSEL1 |= (CLKPWR_PCLKSEL_SET(bitpos, DivVal));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get current value of each Peripheral Clock Selection
|
||||
* @param[in] ClkType Peripheral Clock Selection of each type,
|
||||
* should be one of the following:
|
||||
* - CLKPWR_PCLKSEL_WDT : WDT
|
||||
- CLKPWR_PCLKSEL_TIMER0 : Timer 0
|
||||
- CLKPWR_PCLKSEL_TIMER1 : Timer 1
|
||||
- CLKPWR_PCLKSEL_UART0 : UART 0
|
||||
- CLKPWR_PCLKSEL_UART1 : UART 1
|
||||
- CLKPWR_PCLKSEL_PWM1 : PWM 1
|
||||
- CLKPWR_PCLKSEL_I2C0 : I2C 0
|
||||
- CLKPWR_PCLKSEL_SPI : SPI
|
||||
- CLKPWR_PCLKSEL_SSP1 : SSP 1
|
||||
- CLKPWR_PCLKSEL_DAC : DAC
|
||||
- CLKPWR_PCLKSEL_ADC : ADC
|
||||
- CLKPWR_PCLKSEL_CAN1 : CAN 1
|
||||
- CLKPWR_PCLKSEL_CAN2 : CAN 2
|
||||
- CLKPWR_PCLKSEL_ACF : ACF
|
||||
- CLKPWR_PCLKSEL_QEI : QEI
|
||||
- CLKPWR_PCLKSEL_PCB : PCB
|
||||
- CLKPWR_PCLKSEL_I2C1 : I2C 1
|
||||
- CLKPWR_PCLKSEL_SSP0 : SSP 0
|
||||
- CLKPWR_PCLKSEL_TIMER2 : Timer 2
|
||||
- CLKPWR_PCLKSEL_TIMER3 : Timer 3
|
||||
- CLKPWR_PCLKSEL_UART2 : UART 2
|
||||
- CLKPWR_PCLKSEL_UART3 : UART 3
|
||||
- CLKPWR_PCLKSEL_I2C2 : I2C 2
|
||||
- CLKPWR_PCLKSEL_I2S : I2S
|
||||
- CLKPWR_PCLKSEL_RIT : RIT
|
||||
- CLKPWR_PCLKSEL_SYSCON : SYSCON
|
||||
- CLKPWR_PCLKSEL_MC : MC
|
||||
|
||||
* @return Value of Selected Peripheral Clock Selection
|
||||
**********************************************************************/
|
||||
uint32_t CLKPWR_GetPCLKSEL (uint32_t ClkType)
|
||||
{
|
||||
uint32_t bitpos, retval;
|
||||
|
||||
if (ClkType < 32)
|
||||
{
|
||||
bitpos = ClkType;
|
||||
retval = LPC_SC->PCLKSEL0;
|
||||
}
|
||||
else
|
||||
{
|
||||
bitpos = ClkType - 32;
|
||||
retval = LPC_SC->PCLKSEL1;
|
||||
}
|
||||
|
||||
retval = CLKPWR_PCLKSEL_GET(bitpos, retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get current value of each Peripheral Clock
|
||||
* @param[in] ClkType Peripheral Clock Selection of each type,
|
||||
* should be one of the following:
|
||||
* - CLKPWR_PCLKSEL_WDT : WDT
|
||||
- CLKPWR_PCLKSEL_TIMER0 : Timer 0
|
||||
- CLKPWR_PCLKSEL_TIMER1 : Timer 1
|
||||
- CLKPWR_PCLKSEL_UART0 : UART 0
|
||||
- CLKPWR_PCLKSEL_UART1 : UART 1
|
||||
- CLKPWR_PCLKSEL_PWM1 : PWM 1
|
||||
- CLKPWR_PCLKSEL_I2C0 : I2C 0
|
||||
- CLKPWR_PCLKSEL_SPI : SPI
|
||||
- CLKPWR_PCLKSEL_SSP1 : SSP 1
|
||||
- CLKPWR_PCLKSEL_DAC : DAC
|
||||
- CLKPWR_PCLKSEL_ADC : ADC
|
||||
- CLKPWR_PCLKSEL_CAN1 : CAN 1
|
||||
- CLKPWR_PCLKSEL_CAN2 : CAN 2
|
||||
- CLKPWR_PCLKSEL_ACF : ACF
|
||||
- CLKPWR_PCLKSEL_QEI : QEI
|
||||
- CLKPWR_PCLKSEL_PCB : PCB
|
||||
- CLKPWR_PCLKSEL_I2C1 : I2C 1
|
||||
- CLKPWR_PCLKSEL_SSP0 : SSP 0
|
||||
- CLKPWR_PCLKSEL_TIMER2 : Timer 2
|
||||
- CLKPWR_PCLKSEL_TIMER3 : Timer 3
|
||||
- CLKPWR_PCLKSEL_UART2 : UART 2
|
||||
- CLKPWR_PCLKSEL_UART3 : UART 3
|
||||
- CLKPWR_PCLKSEL_I2C2 : I2C 2
|
||||
- CLKPWR_PCLKSEL_I2S : I2S
|
||||
- CLKPWR_PCLKSEL_RIT : RIT
|
||||
- CLKPWR_PCLKSEL_SYSCON : SYSCON
|
||||
- CLKPWR_PCLKSEL_MC : MC
|
||||
|
||||
* @return Value of Selected Peripheral Clock
|
||||
**********************************************************************/
|
||||
uint32_t CLKPWR_GetPCLK (uint32_t ClkType)
|
||||
{
|
||||
uint32_t retval, div;
|
||||
|
||||
retval = SystemCoreClock;
|
||||
div = CLKPWR_GetPCLKSEL(ClkType);
|
||||
|
||||
switch (div)
|
||||
{
|
||||
case 0:
|
||||
div = 4;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
div = 1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
div = 2;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
div = 8;
|
||||
break;
|
||||
}
|
||||
retval /= div;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Configure power supply for each peripheral according to NewState
|
||||
* @param[in] PPType Type of peripheral used to enable power,
|
||||
* should be one of the following:
|
||||
* - CLKPWR_PCONP_PCTIM0 : Timer 0
|
||||
- CLKPWR_PCONP_PCTIM1 : Timer 1
|
||||
- CLKPWR_PCONP_PCUART0 : UART 0
|
||||
- CLKPWR_PCONP_PCUART1 : UART 1
|
||||
- CLKPWR_PCONP_PCPWM1 : PWM 1
|
||||
- CLKPWR_PCONP_PCI2C0 : I2C 0
|
||||
- CLKPWR_PCONP_PCSPI : SPI
|
||||
- CLKPWR_PCONP_PCRTC : RTC
|
||||
- CLKPWR_PCONP_PCSSP1 : SSP 1
|
||||
- CLKPWR_PCONP_PCAD : ADC
|
||||
- CLKPWR_PCONP_PCAN1 : CAN 1
|
||||
- CLKPWR_PCONP_PCAN2 : CAN 2
|
||||
- CLKPWR_PCONP_PCGPIO : GPIO
|
||||
- CLKPWR_PCONP_PCRIT : RIT
|
||||
- CLKPWR_PCONP_PCMC : MC
|
||||
- CLKPWR_PCONP_PCQEI : QEI
|
||||
- CLKPWR_PCONP_PCI2C1 : I2C 1
|
||||
- CLKPWR_PCONP_PCSSP0 : SSP 0
|
||||
- CLKPWR_PCONP_PCTIM2 : Timer 2
|
||||
- CLKPWR_PCONP_PCTIM3 : Timer 3
|
||||
- CLKPWR_PCONP_PCUART2 : UART 2
|
||||
- CLKPWR_PCONP_PCUART3 : UART 3
|
||||
- CLKPWR_PCONP_PCI2C2 : I2C 2
|
||||
- CLKPWR_PCONP_PCI2S : I2S
|
||||
- CLKPWR_PCONP_PCGPDMA : GPDMA
|
||||
- CLKPWR_PCONP_PCENET : Ethernet
|
||||
- CLKPWR_PCONP_PCUSB : USB
|
||||
*
|
||||
* @param[in] NewState New state of Peripheral Power, should be:
|
||||
* - ENABLE : Enable power for this peripheral
|
||||
* - DISABLE : Disable power for this peripheral
|
||||
*
|
||||
* @return none
|
||||
**********************************************************************/
|
||||
void CLKPWR_ConfigPPWR (uint32_t PPType, FunctionalState NewState)
|
||||
{
|
||||
if (NewState == ENABLE)
|
||||
{
|
||||
LPC_SC->PCONP |= PPType & CLKPWR_PCONP_BITMASK;
|
||||
}
|
||||
else if (NewState == DISABLE)
|
||||
{
|
||||
LPC_SC->PCONP &= (~PPType) & CLKPWR_PCONP_BITMASK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enter Sleep mode with co-operated instruction by the Cortex-M3.
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void CLKPWR_Sleep(void)
|
||||
{
|
||||
LPC_SC->PCON = 0x00;
|
||||
/* Sleep Mode*/
|
||||
__WFI();
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enter Deep Sleep mode with co-operated instruction by the Cortex-M3.
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void CLKPWR_DeepSleep(void)
|
||||
{
|
||||
/* Deep-Sleep Mode, set SLEEPDEEP bit */
|
||||
SCB->SCR = 0x4;
|
||||
LPC_SC->PCON = 0x00;
|
||||
/* Deep Sleep Mode*/
|
||||
__WFI();
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enter Power Down mode with co-operated instruction by the Cortex-M3.
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void CLKPWR_PowerDown(void)
|
||||
{
|
||||
/* Deep-Sleep Mode, set SLEEPDEEP bit */
|
||||
SCB->SCR = 0x4;
|
||||
LPC_SC->PCON = 0x01;
|
||||
/* Power Down Mode*/
|
||||
__WFI();
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enter Deep Power Down mode with co-operated instruction by the Cortex-M3.
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void CLKPWR_DeepPowerDown(void)
|
||||
{
|
||||
/* Deep-Sleep Mode, set SLEEPDEEP bit */
|
||||
SCB->SCR = 0x4;
|
||||
LPC_SC->PCON = 0x03;
|
||||
/* Deep Power Down Mode*/
|
||||
__WFI();
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* --------------------------------- End Of File ------------------------------ */
|
||||
@@ -0,0 +1,151 @@
|
||||
/**********************************************************************
|
||||
* $Id$ lpc17xx_dac.c 2010-05-21
|
||||
*//**
|
||||
* @file lpc17xx_dac.c
|
||||
* @brief Contains all functions support for DAC firmware library on LPC17xx
|
||||
* @version 2.0
|
||||
* @date 21. May. 2010
|
||||
* @author NXP MCU SW Application Team
|
||||
*
|
||||
* Copyright(C) 2010, NXP Semiconductor
|
||||
* All rights reserved.
|
||||
*
|
||||
***********************************************************************
|
||||
* Software that is described herein is for illustrative purposes only
|
||||
* which provides customers with programming information regarding the
|
||||
* products. This software is supplied "AS IS" without any warranties.
|
||||
* NXP Semiconductors assumes no responsibility or liability for the
|
||||
* use of the software, conveys no license or title under any patent,
|
||||
* copyright, or mask work right to the product. NXP Semiconductors
|
||||
* reserves the right to make changes in the software without
|
||||
* notification. NXP Semiconductors also make no representation or
|
||||
* warranty that such application will be suitable for the specified
|
||||
* use without further testing or modification.
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation is hereby granted, under NXP Semiconductors'
|
||||
* relevant copyright in the software, without fee, provided that it
|
||||
* is used in conjunction with NXP Semiconductors microcontrollers. This
|
||||
* copyright, permission, and disclaimer notice must appear in all copies of
|
||||
* this code.
|
||||
**********************************************************************/
|
||||
|
||||
/* Peripheral group ----------------------------------------------------------- */
|
||||
/** @addtogroup DAC
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------- */
|
||||
#include "lpc17xx_dac.h"
|
||||
#include "lpc17xx_clkpwr.h"
|
||||
|
||||
/* If this source file built with example, the LPC17xx FW library configuration
|
||||
* file in each example directory ("lpc17xx_libcfg.h") must be included,
|
||||
* otherwise the default FW library configuration file must be included instead
|
||||
*/
|
||||
#ifdef __BUILD_WITH_EXAMPLE__
|
||||
#include "lpc17xx_libcfg.h"
|
||||
#else
|
||||
#include "lpc17xx_libcfg_default.h"
|
||||
#endif /* __BUILD_WITH_EXAMPLE__ */
|
||||
|
||||
|
||||
#ifdef _DAC
|
||||
|
||||
/* Public Functions ----------------------------------------------------------- */
|
||||
/** @addtogroup DAC_Public_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Initial ADC configuration
|
||||
* - Maximum current is 700 uA
|
||||
* - Value to AOUT is 0
|
||||
* @param[in] DACx pointer to LPC_DAC_TypeDef, should be: LPC_DAC
|
||||
* @return None
|
||||
***********************************************************************/
|
||||
void DAC_Init(LPC_DAC_TypeDef *DACx)
|
||||
{
|
||||
CHECK_PARAM(PARAM_DACx(DACx));
|
||||
/* Set default clock divider for DAC */
|
||||
// CLKPWR_SetPCLKDiv (CLKPWR_PCLKSEL_DAC, CLKPWR_PCLKSEL_CCLK_DIV_4);
|
||||
//Set maximum current output
|
||||
DAC_SetBias(LPC_DAC,DAC_MAX_CURRENT_700uA);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Update value to DAC
|
||||
* @param[in] DACx pointer to LPC_DAC_TypeDef, should be: LPC_DAC
|
||||
* @param[in] dac_value : value 10 bit to be converted to output
|
||||
* @return None
|
||||
***********************************************************************/
|
||||
void DAC_UpdateValue (LPC_DAC_TypeDef *DACx,uint32_t dac_value)
|
||||
{
|
||||
uint32_t tmp;
|
||||
CHECK_PARAM(PARAM_DACx(DACx));
|
||||
tmp = DACx->DACR & DAC_BIAS_EN;
|
||||
tmp |= DAC_VALUE(dac_value);
|
||||
// Update value
|
||||
DACx->DACR = tmp;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set Maximum current for DAC
|
||||
* @param[in] DACx pointer to LPC_DAC_TypeDef, should be: LPC_DAC
|
||||
* @param[in] bias : 0 is 700 uA
|
||||
* 1 350 uA
|
||||
* @return None
|
||||
***********************************************************************/
|
||||
void DAC_SetBias (LPC_DAC_TypeDef *DACx,uint32_t bias)
|
||||
{
|
||||
CHECK_PARAM(PARAM_DAC_CURRENT_OPT(bias));
|
||||
DACx->DACR &=~DAC_BIAS_EN;
|
||||
if (bias == DAC_MAX_CURRENT_350uA)
|
||||
{
|
||||
DACx->DACR |= DAC_BIAS_EN;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief To enable the DMA operation and control DMA timer
|
||||
* @param[in] DACx pointer to LPC_DAC_TypeDef, should be: LPC_DAC
|
||||
* @param[in] DAC_ConverterConfigStruct pointer to DAC_CONVERTER_CFG_Type
|
||||
* - DBLBUF_ENA : enable/disable DACR double buffering feature
|
||||
* - CNT_ENA : enable/disable timer out counter
|
||||
* - DMA_ENA : enable/disable DMA access
|
||||
* @return None
|
||||
***********************************************************************/
|
||||
void DAC_ConfigDAConverterControl (LPC_DAC_TypeDef *DACx,DAC_CONVERTER_CFG_Type *DAC_ConverterConfigStruct)
|
||||
{
|
||||
CHECK_PARAM(PARAM_DACx(DACx));
|
||||
DACx->DACCTRL &= ~DAC_DACCTRL_MASK;
|
||||
if (DAC_ConverterConfigStruct->DBLBUF_ENA)
|
||||
DACx->DACCTRL |= DAC_DBLBUF_ENA;
|
||||
if (DAC_ConverterConfigStruct->CNT_ENA)
|
||||
DACx->DACCTRL |= DAC_CNT_ENA;
|
||||
if (DAC_ConverterConfigStruct->DMA_ENA)
|
||||
DACx->DACCTRL |= DAC_DMA_ENA;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set reload value for interrupt/DMA counter
|
||||
* @param[in] DACx pointer to LPC_DAC_TypeDef, should be: LPC_DAC
|
||||
* @param[in] time_out time out to reload for interrupt/DMA counter
|
||||
* @return None
|
||||
***********************************************************************/
|
||||
void DAC_SetDMATimeOut(LPC_DAC_TypeDef *DACx, uint32_t time_out)
|
||||
{
|
||||
CHECK_PARAM(PARAM_DACx(DACx));
|
||||
DACx->DACCNTVAL = DAC_CCNT_VALUE(time_out);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* _DAC */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* --------------------------------- End Of File ------------------------------ */
|
||||
@@ -0,0 +1,963 @@
|
||||
/**********************************************************************
|
||||
* $Id$ lpc17xx_emac.c 2010-05-21
|
||||
*//**
|
||||
* @file lpc17xx_emac.c
|
||||
* @brief Contains all functions support for Ethernet MAC firmware
|
||||
* library on LPC17xx
|
||||
* @version 2.0
|
||||
* @date 21. May. 2010
|
||||
* @author NXP MCU SW Application Team
|
||||
*
|
||||
* Copyright(C) 2010, NXP Semiconductor
|
||||
* All rights reserved.
|
||||
*
|
||||
***********************************************************************
|
||||
* Software that is described herein is for illustrative purposes only
|
||||
* which provides customers with programming information regarding the
|
||||
* products. This software is supplied "AS IS" without any warranties.
|
||||
* NXP Semiconductors assumes no responsibility or liability for the
|
||||
* use of the software, conveys no license or title under any patent,
|
||||
* copyright, or mask work right to the product. NXP Semiconductors
|
||||
* reserves the right to make changes in the software without
|
||||
* notification. NXP Semiconductors also make no representation or
|
||||
* warranty that such application will be suitable for the specified
|
||||
* use without further testing or modification.
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation is hereby granted, under NXP Semiconductors'
|
||||
* relevant copyright in the software, without fee, provided that it
|
||||
* is used in conjunction with NXP Semiconductors microcontrollers. This
|
||||
* copyright, permission, and disclaimer notice must appear in all copies of
|
||||
* this code.
|
||||
**********************************************************************/
|
||||
|
||||
/* Peripheral group ----------------------------------------------------------- */
|
||||
/** @addtogroup EMAC
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------- */
|
||||
#include "lpc17xx_emac.h"
|
||||
#include "lpc17xx_clkpwr.h"
|
||||
|
||||
/* If this source file built with example, the LPC17xx FW library configuration
|
||||
* file in each example directory ("lpc17xx_libcfg.h") must be included,
|
||||
* otherwise the default FW library configuration file must be included instead
|
||||
*/
|
||||
#ifdef __BUILD_WITH_EXAMPLE__
|
||||
#include "lpc17xx_libcfg.h"
|
||||
#else
|
||||
#include "lpc17xx_libcfg_default.h"
|
||||
#endif /* __BUILD_WITH_EXAMPLE__ */
|
||||
|
||||
|
||||
#ifdef _EMAC
|
||||
|
||||
/* Private Variables ---------------------------------------------------------- */
|
||||
/** @defgroup EMAC_Private_Variables EMAC Private Variables
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* MII Mgmt Configuration register - Clock divider setting */
|
||||
const uint8_t EMAC_clkdiv[] = { 4, 6, 8, 10, 14, 20, 28, 36, 40, 44, 48, 52, 56, 60, 64};
|
||||
|
||||
/* EMAC local DMA Descriptors */
|
||||
|
||||
/** Rx Descriptor data array */
|
||||
static RX_Desc Rx_Desc[EMAC_NUM_RX_FRAG];
|
||||
|
||||
/** Rx Status data array - Must be 8-Byte aligned */
|
||||
#if defined ( __CC_ARM )
|
||||
static __align(8) RX_Stat Rx_Stat[EMAC_NUM_RX_FRAG];
|
||||
#elif defined ( __ICCARM__ )
|
||||
#pragma data_alignment=8
|
||||
static RX_Stat Rx_Stat[EMAC_NUM_RX_FRAG];
|
||||
#elif defined ( __GNUC__ )
|
||||
static __attribute__ ((aligned (8))) RX_Stat Rx_Stat[EMAC_NUM_RX_FRAG];
|
||||
#endif
|
||||
|
||||
/** Tx Descriptor data array */
|
||||
static TX_Desc Tx_Desc[EMAC_NUM_TX_FRAG];
|
||||
/** Tx Status data array */
|
||||
static TX_Stat Tx_Stat[EMAC_NUM_TX_FRAG];
|
||||
|
||||
/* EMAC local DMA buffers */
|
||||
/** Rx buffer data */
|
||||
static uint32_t rx_buf[EMAC_NUM_RX_FRAG][EMAC_ETH_MAX_FLEN>>2];
|
||||
/** Tx buffer data */
|
||||
static uint32_t tx_buf[EMAC_NUM_TX_FRAG][EMAC_ETH_MAX_FLEN>>2];
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private Functions ---------------------------------------------------------- */
|
||||
static void rx_descr_init (void);
|
||||
static void tx_descr_init (void);
|
||||
static int32_t write_PHY (uint32_t PhyReg, uint16_t Value);
|
||||
static int32_t read_PHY (uint32_t PhyReg);
|
||||
|
||||
static void setEmacAddr(uint8_t abStationAddr[]);
|
||||
static int32_t emac_CRCCalc(uint8_t frame_no_fcs[], int32_t frame_len);
|
||||
|
||||
|
||||
/*--------------------------- rx_descr_init ---------------------------------*/
|
||||
/*********************************************************************//**
|
||||
* @brief Initializes RX Descriptor
|
||||
* @param[in] None
|
||||
* @return None
|
||||
***********************************************************************/
|
||||
static void rx_descr_init (void)
|
||||
{
|
||||
/* Initialize Receive Descriptor and Status array. */
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < EMAC_NUM_RX_FRAG; i++) {
|
||||
Rx_Desc[i].Packet = (uint32_t)&rx_buf[i];
|
||||
Rx_Desc[i].Ctrl = EMAC_RCTRL_INT | (EMAC_ETH_MAX_FLEN - 1);
|
||||
Rx_Stat[i].Info = 0;
|
||||
Rx_Stat[i].HashCRC = 0;
|
||||
}
|
||||
|
||||
/* Set EMAC Receive Descriptor Registers. */
|
||||
LPC_EMAC->RxDescriptor = (uint32_t)&Rx_Desc[0];
|
||||
LPC_EMAC->RxStatus = (uint32_t)&Rx_Stat[0];
|
||||
LPC_EMAC->RxDescriptorNumber = EMAC_NUM_RX_FRAG - 1;
|
||||
|
||||
/* Rx Descriptors Point to 0 */
|
||||
LPC_EMAC->RxConsumeIndex = 0;
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------- tx_descr_init ---- ----------------------------*/
|
||||
/*********************************************************************//**
|
||||
* @brief Initializes TX Descriptor
|
||||
* @param[in] None
|
||||
* @return None
|
||||
***********************************************************************/
|
||||
static void tx_descr_init (void) {
|
||||
/* Initialize Transmit Descriptor and Status array. */
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < EMAC_NUM_TX_FRAG; i++) {
|
||||
Tx_Desc[i].Packet = (uint32_t)&tx_buf[i];
|
||||
Tx_Desc[i].Ctrl = 0;
|
||||
Tx_Stat[i].Info = 0;
|
||||
}
|
||||
|
||||
/* Set EMAC Transmit Descriptor Registers. */
|
||||
LPC_EMAC->TxDescriptor = (uint32_t)&Tx_Desc[0];
|
||||
LPC_EMAC->TxStatus = (uint32_t)&Tx_Stat[0];
|
||||
LPC_EMAC->TxDescriptorNumber = EMAC_NUM_TX_FRAG - 1;
|
||||
|
||||
/* Tx Descriptors Point to 0 */
|
||||
LPC_EMAC->TxProduceIndex = 0;
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------- write_PHY -------------------------------------*/
|
||||
/*********************************************************************//**
|
||||
* @brief Write value to PHY device
|
||||
* @param[in] PhyReg: PHY Register address
|
||||
* @param[in] Value: Value to write
|
||||
* @return 0 - if success
|
||||
* 1 - if fail
|
||||
***********************************************************************/
|
||||
static int32_t write_PHY (uint32_t PhyReg, uint16_t Value)
|
||||
{
|
||||
/* Write a data 'Value' to PHY register 'PhyReg'. */
|
||||
uint32_t tout;
|
||||
|
||||
LPC_EMAC->MADR = EMAC_DEF_ADR | PhyReg;
|
||||
LPC_EMAC->MWTD = Value;
|
||||
|
||||
/* Wait until operation completed */
|
||||
tout = 0;
|
||||
for (tout = 0; tout < EMAC_MII_WR_TOUT; tout++) {
|
||||
if ((LPC_EMAC->MIND & EMAC_MIND_BUSY) == 0) {
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
// Time out!
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------- read_PHY --------------------------------------*/
|
||||
/*********************************************************************//**
|
||||
* @brief Read value from PHY device
|
||||
* @param[in] PhyReg: PHY Register address
|
||||
* @return 0 - if success
|
||||
* 1 - if fail
|
||||
***********************************************************************/
|
||||
static int32_t read_PHY (uint32_t PhyReg)
|
||||
{
|
||||
/* Read a PHY register 'PhyReg'. */
|
||||
uint32_t tout;
|
||||
|
||||
LPC_EMAC->MADR = EMAC_DEF_ADR | PhyReg;
|
||||
LPC_EMAC->MCMD = EMAC_MCMD_READ;
|
||||
|
||||
/* Wait until operation completed */
|
||||
tout = 0;
|
||||
for (tout = 0; tout < EMAC_MII_RD_TOUT; tout++) {
|
||||
if ((LPC_EMAC->MIND & EMAC_MIND_BUSY) == 0) {
|
||||
LPC_EMAC->MCMD = 0;
|
||||
return (LPC_EMAC->MRDD);
|
||||
}
|
||||
}
|
||||
// Time out!
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set Station MAC address for EMAC module
|
||||
* @param[in] abStationAddr Pointer to Station address that contains 6-bytes
|
||||
* of MAC address (should be in order from MAC Address 1 to MAC Address 6)
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
static void setEmacAddr(uint8_t abStationAddr[])
|
||||
{
|
||||
/* Set the Ethernet MAC Address registers */
|
||||
LPC_EMAC->SA0 = ((uint32_t)abStationAddr[5] << 8) | (uint32_t)abStationAddr[4];
|
||||
LPC_EMAC->SA1 = ((uint32_t)abStationAddr[3] << 8) | (uint32_t)abStationAddr[2];
|
||||
LPC_EMAC->SA2 = ((uint32_t)abStationAddr[1] << 8) | (uint32_t)abStationAddr[0];
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Calculates CRC code for number of bytes in the frame
|
||||
* @param[in] frame_no_fcs Pointer to the first byte of the frame
|
||||
* @param[in] frame_len length of the frame without the FCS
|
||||
* @return the CRC as a 32 bit integer
|
||||
**********************************************************************/
|
||||
static int32_t emac_CRCCalc(uint8_t frame_no_fcs[], int32_t frame_len)
|
||||
{
|
||||
int i; // iterator
|
||||
int j; // another iterator
|
||||
char byte; // current byte
|
||||
int crc; // CRC result
|
||||
int q0, q1, q2, q3; // temporary variables
|
||||
crc = 0xFFFFFFFF;
|
||||
for (i = 0; i < frame_len; i++) {
|
||||
byte = *frame_no_fcs++;
|
||||
for (j = 0; j < 2; j++) {
|
||||
if (((crc >> 28) ^ (byte >> 3)) & 0x00000001) {
|
||||
q3 = 0x04C11DB7;
|
||||
} else {
|
||||
q3 = 0x00000000;
|
||||
}
|
||||
if (((crc >> 29) ^ (byte >> 2)) & 0x00000001) {
|
||||
q2 = 0x09823B6E;
|
||||
} else {
|
||||
q2 = 0x00000000;
|
||||
}
|
||||
if (((crc >> 30) ^ (byte >> 1)) & 0x00000001) {
|
||||
q1 = 0x130476DC;
|
||||
} else {
|
||||
q1 = 0x00000000;
|
||||
}
|
||||
if (((crc >> 31) ^ (byte >> 0)) & 0x00000001) {
|
||||
q0 = 0x2608EDB8;
|
||||
} else {
|
||||
q0 = 0x00000000;
|
||||
}
|
||||
crc = (crc << 4) ^ q3 ^ q2 ^ q1 ^ q0;
|
||||
byte >>= 4;
|
||||
}
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
/* End of Private Functions --------------------------------------------------- */
|
||||
|
||||
|
||||
/* Public Functions ----------------------------------------------------------- */
|
||||
/** @addtogroup EMAC_Public_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Initializes the EMAC peripheral according to the specified
|
||||
* parameters in the EMAC_ConfigStruct.
|
||||
* @param[in] EMAC_ConfigStruct Pointer to a EMAC_CFG_Type structure
|
||||
* that contains the configuration information for the
|
||||
* specified EMAC peripheral.
|
||||
* @return None
|
||||
*
|
||||
* Note: This function will initialize EMAC module according to procedure below:
|
||||
* - Remove the soft reset condition from the MAC
|
||||
* - Configure the PHY via the MIIM interface of the MAC
|
||||
* - Select RMII mode
|
||||
* - Configure the transmit and receive DMA engines, including the descriptor arrays
|
||||
* - Configure the host registers (MAC1,MAC2 etc.) in the MAC
|
||||
* - Enable the receive and transmit data paths
|
||||
* In default state after initializing, only Rx Done and Tx Done interrupt are enabled,
|
||||
* all remain interrupts are disabled
|
||||
* (Ref. from LPC17xx UM)
|
||||
**********************************************************************/
|
||||
Status EMAC_Init(EMAC_CFG_Type *EMAC_ConfigStruct)
|
||||
{
|
||||
/* Initialize the EMAC Ethernet controller. */
|
||||
int32_t regv,tout, tmp;
|
||||
|
||||
/* Set up clock and power for Ethernet module */
|
||||
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCENET, ENABLE);
|
||||
|
||||
/* Reset all EMAC internal modules */
|
||||
LPC_EMAC->MAC1 = EMAC_MAC1_RES_TX | EMAC_MAC1_RES_MCS_TX | EMAC_MAC1_RES_RX |
|
||||
EMAC_MAC1_RES_MCS_RX | EMAC_MAC1_SIM_RES | EMAC_MAC1_SOFT_RES;
|
||||
|
||||
LPC_EMAC->Command = EMAC_CR_REG_RES | EMAC_CR_TX_RES | EMAC_CR_RX_RES | EMAC_CR_PASS_RUNT_FRM;
|
||||
|
||||
/* A short delay after reset. */
|
||||
for (tout = 100; tout; tout--);
|
||||
|
||||
/* Initialize MAC control registers. */
|
||||
LPC_EMAC->MAC1 = EMAC_MAC1_PASS_ALL;
|
||||
LPC_EMAC->MAC2 = EMAC_MAC2_CRC_EN | EMAC_MAC2_PAD_EN;
|
||||
LPC_EMAC->MAXF = EMAC_ETH_MAX_FLEN;
|
||||
/*
|
||||
* Find the clock that close to desired target clock
|
||||
*/
|
||||
tmp = SystemCoreClock / EMAC_MCFG_MII_MAXCLK;
|
||||
for (tout = 0; tout < sizeof (EMAC_clkdiv); tout++){
|
||||
if (EMAC_clkdiv[tout] >= tmp) break;
|
||||
}
|
||||
tout++;
|
||||
// Write to MAC configuration register and reset
|
||||
LPC_EMAC->MCFG = EMAC_MCFG_CLK_SEL(tout) | EMAC_MCFG_RES_MII;
|
||||
// release reset
|
||||
LPC_EMAC->MCFG &= ~(EMAC_MCFG_RES_MII);
|
||||
LPC_EMAC->CLRT = EMAC_CLRT_DEF;
|
||||
LPC_EMAC->IPGR = EMAC_IPGR_P2_DEF;
|
||||
|
||||
/* Enable Reduced MII interface. */
|
||||
LPC_EMAC->Command = EMAC_CR_RMII | EMAC_CR_PASS_RUNT_FRM;
|
||||
|
||||
/* Reset Reduced MII Logic. */
|
||||
// LPC_EMAC->SUPP = EMAC_SUPP_RES_RMII;
|
||||
|
||||
for (tout = 100; tout; tout--);
|
||||
LPC_EMAC->SUPP = 0;
|
||||
|
||||
/* Put the DP83848C in reset mode */
|
||||
write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_BMCR_RESET);
|
||||
|
||||
/* Wait for hardware reset to end. */
|
||||
for (tout = EMAC_PHY_RESP_TOUT; tout>=0; tout--) {
|
||||
regv = read_PHY (EMAC_PHY_REG_BMCR);
|
||||
if (!(regv & (EMAC_PHY_BMCR_RESET | EMAC_PHY_BMCR_POWERDOWN))) {
|
||||
/* Reset complete, device not Power Down. */
|
||||
break;
|
||||
}
|
||||
if (tout == 0){
|
||||
// Time out, return ERROR
|
||||
return (ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
// Set PHY mode
|
||||
if (EMAC_SetPHYMode(EMAC_ConfigStruct->Mode) < 0){
|
||||
return (ERROR);
|
||||
}
|
||||
|
||||
// Set EMAC address
|
||||
setEmacAddr(EMAC_ConfigStruct->pbEMAC_Addr);
|
||||
|
||||
/* Initialize Tx and Rx DMA Descriptors */
|
||||
rx_descr_init ();
|
||||
tx_descr_init ();
|
||||
|
||||
// Set Receive Filter register: enable broadcast and multicast
|
||||
LPC_EMAC->RxFilterCtrl = EMAC_RFC_MCAST_EN | EMAC_RFC_BCAST_EN | EMAC_RFC_PERFECT_EN;
|
||||
|
||||
/* Enable Rx Done and Tx Done interrupt for EMAC */
|
||||
LPC_EMAC->IntEnable = EMAC_INT_RX_DONE | EMAC_INT_TX_DONE;
|
||||
|
||||
/* Reset all interrupts */
|
||||
LPC_EMAC->IntClear = 0xFFFF;
|
||||
|
||||
/* Enable receive and transmit mode of MAC Ethernet core */
|
||||
LPC_EMAC->Command |= (EMAC_CR_RX_EN | EMAC_CR_TX_EN);
|
||||
LPC_EMAC->MAC1 |= EMAC_MAC1_REC_EN;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief De-initializes the EMAC peripheral registers to their
|
||||
* default reset values.
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EMAC_DeInit(void)
|
||||
{
|
||||
// Disable all interrupt
|
||||
LPC_EMAC->IntEnable = 0x00;
|
||||
// Clear all pending interrupt
|
||||
LPC_EMAC->IntClear = (0xFF) | (EMAC_INT_SOFT_INT | EMAC_INT_WAKEUP);
|
||||
|
||||
/* TurnOff clock and power for Ethernet module */
|
||||
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCENET, DISABLE);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Check specified PHY status in EMAC peripheral
|
||||
* @param[in] ulPHYState Specified PHY Status Type, should be:
|
||||
* - EMAC_PHY_STAT_LINK: Link Status
|
||||
* - EMAC_PHY_STAT_SPEED: Speed Status
|
||||
* - EMAC_PHY_STAT_DUP: Duplex Status
|
||||
* @return Status of specified PHY status (0 or 1).
|
||||
* (-1) if error.
|
||||
*
|
||||
* Note:
|
||||
* For EMAC_PHY_STAT_LINK, return value:
|
||||
* - 0: Link Down
|
||||
* - 1: Link Up
|
||||
* For EMAC_PHY_STAT_SPEED, return value:
|
||||
* - 0: 10Mbps
|
||||
* - 1: 100Mbps
|
||||
* For EMAC_PHY_STAT_DUP, return value:
|
||||
* - 0: Half-Duplex
|
||||
* - 1: Full-Duplex
|
||||
**********************************************************************/
|
||||
int32_t EMAC_CheckPHYStatus(uint32_t ulPHYState)
|
||||
{
|
||||
int32_t regv, tmp;
|
||||
#ifdef MCB_LPC_1768
|
||||
regv = read_PHY (EMAC_PHY_REG_STS);
|
||||
switch(ulPHYState){
|
||||
case EMAC_PHY_STAT_LINK:
|
||||
tmp = (regv & EMAC_PHY_SR_LINK) ? 1 : 0;
|
||||
break;
|
||||
case EMAC_PHY_STAT_SPEED:
|
||||
tmp = (regv & EMAC_PHY_SR_SPEED) ? 0 : 1;
|
||||
break;
|
||||
case EMAC_PHY_STAT_DUP:
|
||||
tmp = (regv & EMAC_PHY_SR_FULL_DUP) ? 1 : 0;
|
||||
break;
|
||||
#elif defined(IAR_LPC_1768)
|
||||
/* Use IAR_LPC_1768 board:
|
||||
* FSZ8721BL doesn't have Status Register
|
||||
* so we read Basic Mode Status Register (0x01h) instead
|
||||
*/
|
||||
regv = read_PHY (EMAC_PHY_REG_BMSR);
|
||||
switch(ulPHYState){
|
||||
case EMAC_PHY_STAT_LINK:
|
||||
tmp = (regv & EMAC_PHY_BMSR_LINK_STATUS) ? 1 : 0;
|
||||
break;
|
||||
case EMAC_PHY_STAT_SPEED:
|
||||
tmp = (regv & EMAC_PHY_SR_100_SPEED) ? 1 : 0;
|
||||
break;
|
||||
case EMAC_PHY_STAT_DUP:
|
||||
tmp = (regv & EMAC_PHY_SR_FULL_DUP) ? 1 : 0;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
tmp = -1;
|
||||
break;
|
||||
}
|
||||
return (tmp);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set specified PHY mode in EMAC peripheral
|
||||
* @param[in] ulPHYMode Specified PHY mode, should be:
|
||||
* - EMAC_MODE_AUTO
|
||||
* - EMAC_MODE_10M_FULL
|
||||
* - EMAC_MODE_10M_HALF
|
||||
* - EMAC_MODE_100M_FULL
|
||||
* - EMAC_MODE_100M_HALF
|
||||
* @return Return (0) if no error, otherwise return (-1)
|
||||
**********************************************************************/
|
||||
int32_t EMAC_SetPHYMode(uint32_t ulPHYMode)
|
||||
{
|
||||
int32_t id1, id2, tout;
|
||||
|
||||
/* Check if this is a DP83848C PHY. */
|
||||
id1 = read_PHY (EMAC_PHY_REG_IDR1);
|
||||
id2 = read_PHY (EMAC_PHY_REG_IDR2);
|
||||
|
||||
#ifdef MCB_LPC_1768
|
||||
if (((id1 << 16) | (id2 & 0xFFF0)) == EMAC_DP83848C_ID) {
|
||||
switch(ulPHYMode){
|
||||
case EMAC_MODE_AUTO:
|
||||
write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_AUTO_NEG);
|
||||
#elif defined(IAR_LPC_1768) /* Use IAR LPC1768 KickStart board */
|
||||
if (((id1 << 16) | id2) == EMAC_KSZ8721BL_ID) {
|
||||
/* Configure the PHY device */
|
||||
switch(ulPHYMode){
|
||||
case EMAC_MODE_AUTO:
|
||||
/* Use auto-negotiation about the link speed. */
|
||||
write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_AUTO_NEG);
|
||||
// write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_BMCR_AN);
|
||||
#endif
|
||||
/* Wait to complete Auto_Negotiation */
|
||||
for (tout = EMAC_PHY_RESP_TOUT; tout>=0; tout--) {
|
||||
|
||||
}
|
||||
break;
|
||||
case EMAC_MODE_10M_FULL:
|
||||
/* Connect at 10MBit full-duplex */
|
||||
write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_FULLD_10M);
|
||||
break;
|
||||
case EMAC_MODE_10M_HALF:
|
||||
/* Connect at 10MBit half-duplex */
|
||||
write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_HALFD_10M);
|
||||
break;
|
||||
case EMAC_MODE_100M_FULL:
|
||||
/* Connect at 100MBit full-duplex */
|
||||
write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_FULLD_100M);
|
||||
break;
|
||||
case EMAC_MODE_100M_HALF:
|
||||
/* Connect at 100MBit half-duplex */
|
||||
write_PHY (EMAC_PHY_REG_BMCR, EMAC_PHY_HALFD_100M);
|
||||
break;
|
||||
default:
|
||||
// un-supported
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
// It's not correct module ID
|
||||
else {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
// Update EMAC configuration with current PHY status
|
||||
if (EMAC_UpdatePHYStatus() < 0){
|
||||
return (-1);
|
||||
}
|
||||
|
||||
// Complete
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Auto-Configures value for the EMAC configuration register to
|
||||
* match with current PHY mode
|
||||
* @param[in] None
|
||||
* @return Return (0) if no error, otherwise return (-1)
|
||||
*
|
||||
* Note: The EMAC configuration will be auto-configured:
|
||||
* - Speed mode.
|
||||
* - Half/Full duplex mode
|
||||
**********************************************************************/
|
||||
int32_t EMAC_UpdatePHYStatus(void)
|
||||
{
|
||||
int32_t regv, tout;
|
||||
|
||||
/* Check the link status. */
|
||||
#ifdef MCB_LPC_1768
|
||||
for (tout = EMAC_PHY_RESP_TOUT; tout>=0; tout--) {
|
||||
regv = read_PHY (EMAC_PHY_REG_STS);
|
||||
if (regv & EMAC_PHY_SR_LINK) {
|
||||
/* Link is on. */
|
||||
break;
|
||||
}
|
||||
if (tout == 0){
|
||||
// time out
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
/* Configure Full/Half Duplex mode. */
|
||||
if (regv & EMAC_PHY_SR_DUP) {
|
||||
/* Full duplex is enabled. */
|
||||
LPC_EMAC->MAC2 |= EMAC_MAC2_FULL_DUP;
|
||||
LPC_EMAC->Command |= EMAC_CR_FULL_DUP;
|
||||
LPC_EMAC->IPGT = EMAC_IPGT_FULL_DUP;
|
||||
} else {
|
||||
/* Half duplex mode. */
|
||||
LPC_EMAC->IPGT = EMAC_IPGT_HALF_DUP;
|
||||
}
|
||||
if (regv & EMAC_PHY_SR_SPEED) {
|
||||
/* 10MBit mode. */
|
||||
LPC_EMAC->SUPP = 0;
|
||||
} else {
|
||||
/* 100MBit mode. */
|
||||
LPC_EMAC->SUPP = EMAC_SUPP_SPEED;
|
||||
}
|
||||
#elif defined(IAR_LPC_1768)
|
||||
for (tout = EMAC_PHY_RESP_TOUT; tout>=0; tout--) {
|
||||
regv = read_PHY (EMAC_PHY_REG_BMSR);
|
||||
if (regv & EMAC_PHY_BMSR_LINK_STATUS) {
|
||||
/* Link is on. */
|
||||
break;
|
||||
}
|
||||
if (tout == 0){
|
||||
// time out
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Configure Full/Half Duplex mode. */
|
||||
if (regv & EMAC_PHY_SR_FULL_DUP) {
|
||||
/* Full duplex is enabled. */
|
||||
LPC_EMAC->MAC2 |= EMAC_MAC2_FULL_DUP;
|
||||
LPC_EMAC->Command |= EMAC_CR_FULL_DUP;
|
||||
LPC_EMAC->IPGT = EMAC_IPGT_FULL_DUP;
|
||||
} else {
|
||||
/* Half duplex mode. */
|
||||
LPC_EMAC->IPGT = EMAC_IPGT_HALF_DUP;
|
||||
}
|
||||
|
||||
/* Configure 100MBit/10MBit mode. */
|
||||
if (!(regv & EMAC_PHY_SR_100_SPEED)) {
|
||||
/* 10MBit mode. */
|
||||
LPC_EMAC->SUPP = 0;
|
||||
} else {
|
||||
/* 100MBit mode. */
|
||||
LPC_EMAC->SUPP = EMAC_SUPP_SPEED;
|
||||
}
|
||||
#endif
|
||||
// Complete
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enable/Disable hash filter functionality for specified destination
|
||||
* MAC address in EMAC module
|
||||
* @param[in] dstMAC_addr Pointer to the first MAC destination address, should
|
||||
* be 6-bytes length, in order LSB to the MSB
|
||||
* @param[in] NewState New State of this command, should be:
|
||||
* - ENABLE.
|
||||
* - DISABLE.
|
||||
* @return None
|
||||
*
|
||||
* Note:
|
||||
* The standard Ethernet cyclic redundancy check (CRC) function is calculated from
|
||||
* the 6 byte destination address in the Ethernet frame (this CRC is calculated
|
||||
* anyway as part of calculating the CRC of the whole frame), then bits [28:23] out of
|
||||
* the 32 bits CRC result are taken to form the hash. The 6 bit hash is used to access
|
||||
* the hash table: it is used as an index in the 64 bit HashFilter register that has been
|
||||
* programmed with accept values. If the selected accept value is 1, the frame is
|
||||
* accepted.
|
||||
**********************************************************************/
|
||||
void EMAC_SetHashFilter(uint8_t dstMAC_addr[], FunctionalState NewState)
|
||||
{
|
||||
uint32_t *pReg;
|
||||
uint32_t tmp;
|
||||
int32_t crc;
|
||||
|
||||
// Calculate the CRC from the destination MAC address
|
||||
crc = emac_CRCCalc(dstMAC_addr, 6);
|
||||
// Extract the value from CRC to get index value for hash filter table
|
||||
crc = (crc >> 23) & 0x3F;
|
||||
|
||||
pReg = (crc > 31) ? ((uint32_t *)&LPC_EMAC->HashFilterH) \
|
||||
: ((uint32_t *)&LPC_EMAC->HashFilterL);
|
||||
tmp = (crc > 31) ? (crc - 32) : crc;
|
||||
if (NewState == ENABLE) {
|
||||
(*pReg) |= (1UL << tmp);
|
||||
} else {
|
||||
(*pReg) &= ~(1UL << tmp);
|
||||
}
|
||||
// Enable Rx Filter
|
||||
LPC_EMAC->Command &= ~EMAC_CR_PASS_RX_FILT;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enable/Disable Filter mode for each specified type EMAC peripheral
|
||||
* @param[in] ulFilterMode Filter mode, should be:
|
||||
* - EMAC_RFC_UCAST_EN: all frames of unicast types
|
||||
* will be accepted
|
||||
* - EMAC_RFC_BCAST_EN: broadcast frame will be
|
||||
* accepted
|
||||
* - EMAC_RFC_MCAST_EN: all frames of multicast
|
||||
* types will be accepted
|
||||
* - EMAC_RFC_UCAST_HASH_EN: The imperfect hash
|
||||
* filter will be applied to unicast addresses
|
||||
* - EMAC_RFC_MCAST_HASH_EN: The imperfect hash
|
||||
* filter will be applied to multicast addresses
|
||||
* - EMAC_RFC_PERFECT_EN: the destination address
|
||||
* will be compared with the 6 byte station address
|
||||
* programmed in the station address by the filter
|
||||
* - EMAC_RFC_MAGP_WOL_EN: the result of the magic
|
||||
* packet filter will generate a WoL interrupt when
|
||||
* there is a match
|
||||
* - EMAC_RFC_PFILT_WOL_EN: the result of the perfect address
|
||||
* matching filter and the imperfect hash filter will
|
||||
* generate a WoL interrupt when there is a match
|
||||
* @param[in] NewState New State of this command, should be:
|
||||
* - ENABLE
|
||||
* - DISABLE
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EMAC_SetFilterMode(uint32_t ulFilterMode, FunctionalState NewState)
|
||||
{
|
||||
if (NewState == ENABLE){
|
||||
LPC_EMAC->RxFilterCtrl |= ulFilterMode;
|
||||
} else {
|
||||
LPC_EMAC->RxFilterCtrl &= ~ulFilterMode;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get status of Wake On LAN Filter for each specified
|
||||
* type in EMAC peripheral, clear this status if it is set
|
||||
* @param[in] ulWoLMode WoL Filter mode, should be:
|
||||
* - EMAC_WOL_UCAST: unicast frames caused WoL
|
||||
* - EMAC_WOL_UCAST: broadcast frame caused WoL
|
||||
* - EMAC_WOL_MCAST: multicast frame caused WoL
|
||||
* - EMAC_WOL_UCAST_HASH: unicast frame that passes the
|
||||
* imperfect hash filter caused WoL
|
||||
* - EMAC_WOL_MCAST_HASH: multicast frame that passes the
|
||||
* imperfect hash filter caused WoL
|
||||
* - EMAC_WOL_PERFECT:perfect address matching filter
|
||||
* caused WoL
|
||||
* - EMAC_WOL_RX_FILTER: the receive filter caused WoL
|
||||
* - EMAC_WOL_MAG_PACKET: the magic packet filter caused WoL
|
||||
* @return SET/RESET
|
||||
**********************************************************************/
|
||||
FlagStatus EMAC_GetWoLStatus(uint32_t ulWoLMode)
|
||||
{
|
||||
if (LPC_EMAC->RxFilterWoLStatus & ulWoLMode) {
|
||||
LPC_EMAC->RxFilterWoLClear = ulWoLMode;
|
||||
return SET;
|
||||
} else {
|
||||
return RESET;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Write data to Tx packet data buffer at current index due to
|
||||
* TxProduceIndex
|
||||
* @param[in] pDataStruct Pointer to a EMAC_PACKETBUF_Type structure
|
||||
* data that contain specified information about
|
||||
* Packet data buffer.
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EMAC_WritePacketBuffer(EMAC_PACKETBUF_Type *pDataStruct)
|
||||
{
|
||||
uint32_t idx,len;
|
||||
uint32_t *sp,*dp;
|
||||
|
||||
idx = LPC_EMAC->TxProduceIndex;
|
||||
sp = (uint32_t *)pDataStruct->pbDataBuf;
|
||||
dp = (uint32_t *)Tx_Desc[idx].Packet;
|
||||
/* Copy frame data to EMAC packet buffers. */
|
||||
for (len = (pDataStruct->ulDataLen + 3) >> 2; len; len--) {
|
||||
*dp++ = *sp++;
|
||||
}
|
||||
Tx_Desc[idx].Ctrl = (pDataStruct->ulDataLen - 1) | (EMAC_TCTRL_INT | EMAC_TCTRL_LAST);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Read data from Rx packet data buffer at current index due
|
||||
* to RxConsumeIndex
|
||||
* @param[in] pDataStruct Pointer to a EMAC_PACKETBUF_Type structure
|
||||
* data that contain specified information about
|
||||
* Packet data buffer.
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EMAC_ReadPacketBuffer(EMAC_PACKETBUF_Type *pDataStruct)
|
||||
{
|
||||
uint32_t idx, len;
|
||||
uint32_t *dp, *sp;
|
||||
|
||||
idx = LPC_EMAC->RxConsumeIndex;
|
||||
dp = (uint32_t *)pDataStruct->pbDataBuf;
|
||||
sp = (uint32_t *)Rx_Desc[idx].Packet;
|
||||
|
||||
if (pDataStruct->pbDataBuf != NULL) {
|
||||
for (len = (pDataStruct->ulDataLen + 3) >> 2; len; len--) {
|
||||
*dp++ = *sp++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Enable/Disable interrupt for each type in EMAC
|
||||
* @param[in] ulIntType Interrupt Type, should be:
|
||||
* - EMAC_INT_RX_OVERRUN: Receive Overrun
|
||||
* - EMAC_INT_RX_ERR: Receive Error
|
||||
* - EMAC_INT_RX_FIN: Receive Descriptor Finish
|
||||
* - EMAC_INT_RX_DONE: Receive Done
|
||||
* - EMAC_INT_TX_UNDERRUN: Transmit Under-run
|
||||
* - EMAC_INT_TX_ERR: Transmit Error
|
||||
* - EMAC_INT_TX_FIN: Transmit descriptor finish
|
||||
* - EMAC_INT_TX_DONE: Transmit Done
|
||||
* - EMAC_INT_SOFT_INT: Software interrupt
|
||||
* - EMAC_INT_WAKEUP: Wakeup interrupt
|
||||
* @param[in] NewState New State of this function, should be:
|
||||
* - ENABLE.
|
||||
* - DISABLE.
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EMAC_IntCmd(uint32_t ulIntType, FunctionalState NewState)
|
||||
{
|
||||
if (NewState == ENABLE) {
|
||||
LPC_EMAC->IntEnable |= ulIntType;
|
||||
} else {
|
||||
LPC_EMAC->IntEnable &= ~(ulIntType);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Check whether if specified interrupt flag is set or not
|
||||
* for each interrupt type in EMAC and clear interrupt pending
|
||||
* if it is set.
|
||||
* @param[in] ulIntType Interrupt Type, should be:
|
||||
* - EMAC_INT_RX_OVERRUN: Receive Overrun
|
||||
* - EMAC_INT_RX_ERR: Receive Error
|
||||
* - EMAC_INT_RX_FIN: Receive Descriptor Finish
|
||||
* - EMAC_INT_RX_DONE: Receive Done
|
||||
* - EMAC_INT_TX_UNDERRUN: Transmit Under-run
|
||||
* - EMAC_INT_TX_ERR: Transmit Error
|
||||
* - EMAC_INT_TX_FIN: Transmit descriptor finish
|
||||
* - EMAC_INT_TX_DONE: Transmit Done
|
||||
* - EMAC_INT_SOFT_INT: Software interrupt
|
||||
* - EMAC_INT_WAKEUP: Wakeup interrupt
|
||||
* @return New state of specified interrupt (SET or RESET)
|
||||
**********************************************************************/
|
||||
IntStatus EMAC_IntGetStatus(uint32_t ulIntType)
|
||||
{
|
||||
if (LPC_EMAC->IntStatus & ulIntType) {
|
||||
LPC_EMAC->IntClear = ulIntType;
|
||||
return SET;
|
||||
} else {
|
||||
return RESET;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Check whether if the current RxConsumeIndex is not equal to the
|
||||
* current RxProduceIndex.
|
||||
* @param[in] None
|
||||
* @return TRUE if they're not equal, otherwise return FALSE
|
||||
*
|
||||
* Note: In case the RxConsumeIndex is not equal to the RxProduceIndex,
|
||||
* it means there're available data has been received. They should be read
|
||||
* out and released the Receive Data Buffer by updating the RxConsumeIndex value.
|
||||
**********************************************************************/
|
||||
Bool EMAC_CheckReceiveIndex(void)
|
||||
{
|
||||
if (LPC_EMAC->RxConsumeIndex != LPC_EMAC->RxProduceIndex) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Check whether if the current TxProduceIndex is not equal to the
|
||||
* current RxProduceIndex - 1.
|
||||
* @param[in] None
|
||||
* @return TRUE if they're not equal, otherwise return FALSE
|
||||
*
|
||||
* Note: In case the RxConsumeIndex is equal to the RxProduceIndex - 1,
|
||||
* it means the transmit buffer is available and data can be written to transmit
|
||||
* buffer to be sent.
|
||||
**********************************************************************/
|
||||
Bool EMAC_CheckTransmitIndex(void)
|
||||
{
|
||||
uint32_t tmp = LPC_EMAC->TxConsumeIndex;
|
||||
if (LPC_EMAC->TxProduceIndex == ( tmp - 1 ))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if( ( tmp == 0 ) && ( LPC_EMAC->TxProduceIndex == ( EMAC_NUM_TX_FRAG - 1 ) ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get current status value of receive data (due to RxConsumeIndex)
|
||||
* @param[in] ulRxStatType Received Status type, should be one of following:
|
||||
* - EMAC_RINFO_CTRL_FRAME: Control Frame
|
||||
* - EMAC_RINFO_VLAN: VLAN Frame
|
||||
* - EMAC_RINFO_FAIL_FILT: RX Filter Failed
|
||||
* - EMAC_RINFO_MCAST: Multicast Frame
|
||||
* - EMAC_RINFO_BCAST: Broadcast Frame
|
||||
* - EMAC_RINFO_CRC_ERR: CRC Error in Frame
|
||||
* - EMAC_RINFO_SYM_ERR: Symbol Error from PHY
|
||||
* - EMAC_RINFO_LEN_ERR: Length Error
|
||||
* - EMAC_RINFO_RANGE_ERR: Range error(exceeded max size)
|
||||
* - EMAC_RINFO_ALIGN_ERR: Alignment error
|
||||
* - EMAC_RINFO_OVERRUN: Receive overrun
|
||||
* - EMAC_RINFO_NO_DESCR: No new Descriptor available
|
||||
* - EMAC_RINFO_LAST_FLAG: last Fragment in Frame
|
||||
* - EMAC_RINFO_ERR: Error Occurred (OR of all error)
|
||||
* @return Current value of receive data (due to RxConsumeIndex)
|
||||
**********************************************************************/
|
||||
FlagStatus EMAC_CheckReceiveDataStatus(uint32_t ulRxStatType)
|
||||
{
|
||||
uint32_t idx;
|
||||
idx = LPC_EMAC->RxConsumeIndex;
|
||||
return (((Rx_Stat[idx].Info) & ulRxStatType) ? SET : RESET);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Get size of current Received data in received buffer (due to
|
||||
* RxConsumeIndex)
|
||||
* @param[in] None
|
||||
* @return Size of received data
|
||||
**********************************************************************/
|
||||
uint32_t EMAC_GetReceiveDataSize(void)
|
||||
{
|
||||
uint32_t idx;
|
||||
idx =LPC_EMAC->RxConsumeIndex;
|
||||
return ((Rx_Stat[idx].Info) & EMAC_RINFO_SIZE);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Increase the RxConsumeIndex (after reading the Receive buffer
|
||||
* to release the Receive buffer) and wrap-around the index if
|
||||
* it reaches the maximum Receive Number
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EMAC_UpdateRxConsumeIndex(void)
|
||||
{
|
||||
// Get current Rx consume index
|
||||
uint32_t idx = LPC_EMAC->RxConsumeIndex;
|
||||
|
||||
/* Release frame from EMAC buffer */
|
||||
if (++idx == EMAC_NUM_RX_FRAG) idx = 0;
|
||||
LPC_EMAC->RxConsumeIndex = idx;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Increase the TxProduceIndex (after writting to the Transmit buffer
|
||||
* to enable the Transmit buffer) and wrap-around the index if
|
||||
* it reaches the maximum Transmit Number
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EMAC_UpdateTxProduceIndex(void)
|
||||
{
|
||||
// Get current Tx produce index
|
||||
uint32_t idx = LPC_EMAC->TxProduceIndex;
|
||||
|
||||
/* Start frame transmission */
|
||||
if (++idx == EMAC_NUM_TX_FRAG) idx = 0;
|
||||
LPC_EMAC->TxProduceIndex = idx;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* _EMAC */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* --------------------------------- End Of File ------------------------------ */
|
||||
@@ -0,0 +1,171 @@
|
||||
/**********************************************************************
|
||||
* $Id$ lpc17xx_exti.c 2010-06-18
|
||||
*//**
|
||||
* @file lpc17xx_exti.c
|
||||
* @brief Contains all functions support for External interrupt firmware
|
||||
* library on LPC17xx
|
||||
* @version 3.0
|
||||
* @date 18. June. 2010
|
||||
* @author NXP MCU SW Application Team
|
||||
*
|
||||
* Copyright(C) 2010, NXP Semiconductor
|
||||
* All rights reserved.
|
||||
*
|
||||
***********************************************************************
|
||||
* Software that is described herein is for illustrative purposes only
|
||||
* which provides customers with programming information regarding the
|
||||
* products. This software is supplied "AS IS" without any warranties.
|
||||
* NXP Semiconductors assumes no responsibility or liability for the
|
||||
* use of the software, conveys no license or title under any patent,
|
||||
* copyright, or mask work right to the product. NXP Semiconductors
|
||||
* reserves the right to make changes in the software without
|
||||
* notification. NXP Semiconductors also make no representation or
|
||||
* warranty that such application will be suitable for the specified
|
||||
* use without further testing or modification.
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation is hereby granted, under NXP Semiconductors'
|
||||
* relevant copyright in the software, without fee, provided that it
|
||||
* is used in conjunction with NXP Semiconductors microcontrollers. This
|
||||
* copyright, permission, and disclaimer notice must appear in all copies of
|
||||
* this code.
|
||||
**********************************************************************/
|
||||
|
||||
/* Peripheral group ----------------------------------------------------------- */
|
||||
/** @addtogroup EXTI
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------- */
|
||||
#include "lpc17xx_exti.h"
|
||||
|
||||
/* If this source file built with example, the LPC17xx FW library configuration
|
||||
* file in each example directory ("lpc17xx_libcfg.h") must be included,
|
||||
* otherwise the default FW library configuration file must be included instead
|
||||
*/
|
||||
#ifdef __BUILD_WITH_EXAMPLE__
|
||||
#include "lpc17xx_libcfg.h"
|
||||
#else
|
||||
#include "lpc17xx_libcfg_default.h"
|
||||
#endif /* __BUILD_WITH_EXAMPLE__ */
|
||||
|
||||
|
||||
#ifdef _EXTI
|
||||
|
||||
/* Public Functions ----------------------------------------------------------- */
|
||||
/** @addtogroup EXTI_Public_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Initial for EXT
|
||||
* - Set EXTINT, EXTMODE, EXTPOLAR registers to default value
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EXTI_Init(void)
|
||||
{
|
||||
LPC_SC->EXTINT = 0xF;
|
||||
LPC_SC->EXTMODE = 0x0;
|
||||
LPC_SC->EXTPOLAR = 0x0;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Close EXT
|
||||
* @param[in] None
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EXTI_DeInit(void)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Configuration for EXT
|
||||
* - Set EXTINT, EXTMODE, EXTPOLAR register
|
||||
* @param[in] EXTICfg Pointer to a EXTI_InitTypeDef structure
|
||||
* that contains the configuration information for the
|
||||
* specified external interrupt
|
||||
* @return None
|
||||
**********************************************************************/
|
||||
void EXTI_Config(EXTI_InitTypeDef *EXTICfg)
|
||||
{
|
||||
LPC_SC->EXTINT = 0x0;
|
||||
EXTI_SetMode(EXTICfg->EXTI_Line, EXTICfg->EXTI_Mode);
|
||||
EXTI_SetPolarity(EXTICfg->EXTI_Line, EXTICfg->EXTI_polarity);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set mode for EXTI pin
|
||||
* @param[in] EXTILine external interrupt line, should be:
|
||||
* - EXTI_EINT0: external interrupt line 0
|
||||
* - EXTI_EINT1: external interrupt line 1
|
||||
* - EXTI_EINT2: external interrupt line 2
|
||||
* - EXTI_EINT3: external interrupt line 3
|
||||
* @param[in] mode external mode, should be:
|
||||
* - EXTI_MODE_LEVEL_SENSITIVE
|
||||
* - EXTI_MODE_EDGE_SENSITIVE
|
||||
* @return None
|
||||
*********************************************************************/
|
||||
void EXTI_SetMode(EXTI_LINE_ENUM EXTILine, EXTI_MODE_ENUM mode)
|
||||
{
|
||||
if(mode == EXTI_MODE_EDGE_SENSITIVE)
|
||||
{
|
||||
LPC_SC->EXTMODE |= (1 << EXTILine);
|
||||
}
|
||||
else if(mode == EXTI_MODE_LEVEL_SENSITIVE)
|
||||
{
|
||||
LPC_SC->EXTMODE &= ~(1 << EXTILine);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Set polarity for EXTI pin
|
||||
* @param[in] EXTILine external interrupt line, should be:
|
||||
* - EXTI_EINT0: external interrupt line 0
|
||||
* - EXTI_EINT1: external interrupt line 1
|
||||
* - EXTI_EINT2: external interrupt line 2
|
||||
* - EXTI_EINT3: external interrupt line 3
|
||||
* @param[in] polarity external polarity value, should be:
|
||||
* - EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE
|
||||
* - EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE
|
||||
* @return None
|
||||
*********************************************************************/
|
||||
void EXTI_SetPolarity(EXTI_LINE_ENUM EXTILine, EXTI_POLARITY_ENUM polarity)
|
||||
{
|
||||
if(polarity == EXTI_POLARITY_HIGH_ACTIVE_OR_RISING_EDGE)
|
||||
{
|
||||
LPC_SC->EXTPOLAR |= (1 << EXTILine);
|
||||
}
|
||||
else if(polarity == EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE)
|
||||
{
|
||||
LPC_SC->EXTPOLAR &= ~(1 << EXTILine);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
* @brief Clear External interrupt flag
|
||||
* @param[in] EXTILine external interrupt line, should be:
|
||||
* - EXTI_EINT0: external interrupt line 0
|
||||
* - EXTI_EINT1: external interrupt line 1
|
||||
* - EXTI_EINT2: external interrupt line 2
|
||||
* - EXTI_EINT3: external interrupt line 3
|
||||
* @return None
|
||||
*********************************************************************/
|
||||
void EXTI_ClearEXTIFlag(EXTI_LINE_ENUM EXTILine)
|
||||
{
|
||||
LPC_SC->EXTINT = (1 << EXTILine);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* _EXTI */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* --------------------------------- End Of File ------------------------------ */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user